我在GHCi上尝试:t (.) head
并获得结果(a -> [c]) -> a -> c
我对此非常困惑。有人能给我一些提示来帮助我理解这个吗?
对于我自己的想法,结果应该是([a] -> a -> c)-> a -> c
答案 0 :(得分:8)
提示:
(.) head
= \f -> (.) head f
= \f -> head . f
= \f a -> head (f a)
一旦你有了这个,其余部分如下:
head :: [c] -> c
f :: a -> b
- 我们head . f
我们必须b = [c]
现在完整的表达式
\ f a -> head (f a)
:: (a -> [c]) -> a -> c
^ type of f ^ the a ^ result of head (f a)
答案 1 :(得分:2)
head :: [n] -> n
-- b ~ [n] | | c ~ n
-- | |
(.) :: (b -> c) -> (a -> b ) -> a -> c
(.) head :: (a -> [n]) -> a -> n
-- rename n to c: (a -> [c]) -> a -> c