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

Reply via email to