[Haskell-cafe] Recursion in Haskell

Michael Vanier mvanier at cs.caltech.edu
Sun Feb 18 22:01:42 EST 2007



Brandon S. Allbery KF8NH wrote:
> 
> On Feb 18, 2007, at 21:44 , Michael Vanier wrote:
> 
>> I think what you're asking here is why you need the parens around 
>> (x:y) in the second case.  Function application doesn't use parentheses
> 
> Function application never applies to pattern matching.

You're right; I take it back.  However, ":" is not an acceptable variable name 
as such either:

ghci> let foo x : y = x
<interactive>:1:4: Parse error in pattern

":" needs to be surrounded by parens to be treated as a function; otherwise it's 
an operator.  OK, we can try:

ghci> let foo x (:) y = x

<interactive>:1:10:
     Constructor `:' should have 2 arguments, but has been given 0
     In the pattern: :
     In the definition of `foo': foo x : y = x

Bottom line: "foo x:y" is not a valid pattern.

>> The usual answer to this is "category theory" which is an extremely 
>> abstract branch of mathematics.  But you
> 
> Actually, no; my understanding is that category theory as applied to 
> Haskell is a retcon introduced when the notion of monads was imported 
> from category theory, and the original theoretical foundation of Haskell 
> came from a different branch of mathematics.
> 

Nevertheless, a lot of Haskell papers do refer to category theory, and lambda 
calculus can be put into that framework as well, so I don't think my statement 
is invalid.  But as you say, it's a bit of an after-the-fact realization.

Mike




More information about the Haskell-Cafe mailing list