haskell中的功能组合

时间:2014-01-04 04:06:38

标签: haskell composition

我怎么做不到

fst . fst (("Bob",12),10)

在Haskell?

:t fst . fst
Prelude> ((c,b),b1) -> c

这不会使((“Bob”,12),10)成为fst的好候选人。 fst,因为它是

(([Char],Integer),Integer)

1 个答案:

答案 0 :(得分:8)

Haskell中的最高优先级是函数应用程序或f a。所以

fst . fst ((a, b), a)

被解析为

fst . (fst ((a, b), a))

这显然是胡说八道。您可以使用$运算符来解决此问题,该运算符只是具有最低优先级的函数应用程序,因此f $ a == f a

fst . fst $ ((a, b), a)

或者有些parens

(fst . fst) ((a, b), a)