为什么(。)头的类型((a - > [c]) - > a - > c)?

时间:2015-11-10 16:39:58

标签: haskell

我在GHCi上尝试:t (.) head并获得结果(a -> [c]) -> a -> c 我对此非常困惑。有人能给我一些提示来帮助我理解这个吗?

对于我自己的想法,结果应该是([a] -> a -> c)-> a -> c

2 个答案:

答案 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