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
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe