2015-11-10 37 views

回答

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) 
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 
+0

谢谢,我是Haskell的新手,进一步的问题是为什么头指定为(b - > c),但(a - > b)? – Nostaglia

+0

,如果问题是succ。头,我如何改善它有类型或错误?谢谢 – Nostaglia

+0

@Nostaglia因为这是'(。)'的​​第一个参数。 – immibis

相关问题