以下は、指定された関数に引数を 2 回適用する高階関数です。
dapp :: (a -> a -> a) -> a -> a
dapp = \f x -> f x x
ghci> dapp (*) 5
25
それを短くすることはできますか?ラムダボットに聞いてみましょう:
lambdabot> @pl \f x -> f x x
join
万歳!試してみましょう:
import Control.Monad (join)
dapp :: (a -> a -> a) -> a -> a
dapp = join
しかし、うまくいきません:(
No instance for (Monad ((->) a))
arising from a use of `join'
Possible fix: add an instance declaration for (Monad ((->) a))
In the expression: join
In an equation for `dapp': dapp = join
なぜこれが起こるのですか?間違ってインポートしていjoin
ますか? Hoogleでは他に見つかりませんでしjoin
た。