我已经开始关注它,并且更喜欢将它用于简单的情况,在这些情况下,我基本上可以将值从一个输出传递到一个输入。我喜欢的无点构图的一个简单示例是:
let joinLines = foldr (++) "" . intersperse "\n"
今天在玩 GHCI 时,我想看看我是否可以作曲not
和(==)
复制(/=)
,但我真的无法推理出来。(==)
取两个输入,not
取一个。我认为这可能有效:
let ne = not . (==)
假设单个Bool
输出(==)
将转到not
,但它不会编译,引用以下错误:
<interactive>:1:16:
Couldn't match expected type `Bool' with actual type `a0 -> Bool'
Expected type: a0 -> Bool
Actual type: a0 -> a0 -> Bool
In the second argument of `(.)', namely `(==)'
In the expression: not . (==)
我希望我能说这对我来说意义重大,但我得到的只是传递给的第二个论点可能是为了(==)
搞砸事情not
?任何人都可以帮助我更好地理解这个组合背后的逻辑吗?