[Haskell-cafe] Function Type Calculation (Take 2)
PR Stanley
prstanley at ntlworld.com
Wed Apr 30 03:35:05 EDT 2008
[1]
funk f x = f (funk f) x
f :: a
x :: b
funk f x :: c
therefore funk :: a -> b -> c
RHS
f (funk f) x :: c
f (funk f) :: d -> c
x :: d
f :: e -> d -> c
funk :: h -> e
f :: h
unification
f :: a = h = (e -> d -> c)
x b = d
No. x :: b = d (a typo?)
Paul: What's wrong with x being of type b and of type d? Could you
perhaps explain the error please?
Don't forget also that
funk :: a -> b -> c = h -> e,
which means that e = b -> c
Paul: is that something to do with partial application? (funk f) is
a partially applied function, correct? Again an explanation would be
appreciated.
therefore funk :: ((h -> e) -> b -> c) -> b -> c
No. I don't understand where you've got this expression from. It's
funk :: a -> b -> c = (e -> d -> c) -> b -> c = ((b -> c) -> b -> c) - > b -> c
According to GHCi:
Prelude> let funk f x = f (funk f) x
Prelude> :t funk
funk :: ((t1 -> t) -> t1 -> t) -> t1 -> t
which is about the same.
Thanks
Paul
More information about the Haskell-Cafe
mailing list