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