haskell中的功能组合

Jan*_*Doe 4 haskell composition

怎么不能做到

fst . fst (("Bob",12),10)
Run Code Online (Sandbox Code Playgroud)

在哈斯克尔?

:t fst . fst
Prelude> ((c,b),b1) -> c
Run Code Online (Sandbox Code Playgroud)

这不会使(("Bob",12),10)成为fst的一个很好的候选人.fst,因为它

(([Char],Integer),Integer)
Run Code Online (Sandbox Code Playgroud)

Dan*_*zer 8

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

fst . fst ((a, b), a)
Run Code Online (Sandbox Code Playgroud)

被解析为

fst . (fst ((a, b), a))
Run Code Online (Sandbox Code Playgroud)

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

fst . fst $ ((a, b), a)
Run Code Online (Sandbox Code Playgroud)

或者与一些parens

(fst . fst) ((a, b), a)
Run Code Online (Sandbox Code Playgroud)