我试过:t (.) head
GHCi并得到结果(a -> [c]) -> a -> c
我对此非常混淆。有人能给我一个暗示来帮助我理解这一点吗?为什么(。)头的类型((a - > [c]) - > a - > c)?
对于我自己的思想,结果应该是([a] -> a -> c)-> a -> c
我试过:t (.) head
GHCi并得到结果(a -> [c]) -> a -> c
我对此非常混淆。有人能给我一个暗示来帮助我理解这一点吗?为什么(。)头的类型((a - > [c]) - > a - > c)?
对于我自己的思想,结果应该是([a] -> a -> c)-> a -> c
提示:
(.) 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)
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
为什么你认为它应该是'([A] - > A - > C) - > A - > C^'? – leftaroundabout