Hacker News new | ask | show | jobs
by andrus 4824 days ago
Really? Consider

    f :: a -> b -> a
    f a = g a
    
    g :: a -> b -> a
    g a _ = a
It doesn't seem right to say that g "returns a function that takes one b", whereas you could say that about f.
2 comments

Thank you for clarifying! I did not know that all functions in Haskell are considered curried. My surprise stemmed in part from reading a bit about "arity" from [1].

It's interesting how the theoretical model of Haskell--"all functions in Haskell take just single arguments"--differs from implementation, where, for functions of known arity, GHC in particular does not actually "follow the currying story literally" [2].

[1] http://hackage.haskell.org/trac/ghc/wiki/Commentary/Rts/Hask...

[2] http://community.haskell.org/~simonmar/papers/eval-apply.pdf

Any time. It's one of the more interesting parts of Haskell to me, so it's one I always remember.

You're absolutely right to point out that implementations and theory often differ; compilers often do tricky things behind the scences.

(g a) is valid Haskell and it is equal to a constant function that returns a. In fact, g is the Prelude function 'const'.