私はそれに頭を包み始めました。むしろ、1つの出力から1つの入力に値を本質的にパイプできる単純な状況で使用するのが好きです。私が満足している無意味な構成の簡単な例は次のとおりです。
let joinLines = foldr (++) "" . intersperse "\n"
今日 GHCI で遊んでいるときに、 を構成not
し(==)
て複製できるかどうかを確認したかったの(/=)
ですが、実際にはそれを推論できませんでした。(==)
2 つの入力をnot
取り、1 つを取ります。私はこれがうまくいくかもしれないと思った:
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 . (==)
それが私にとって大きな意味があると言えたらいいのにと思いますが、私が得ているのは、渡された2番目の引数(==)
がnot
? この構成の背後にあるロジックをもう少しよく理解するのを手伝ってくれる人はいますか?