fre*_*low 4 monads haskell join higher-order-functions lambdabot
这是一个高阶函数,它将一个参数应用于给定函数两次:
dapp :: (a -> a -> a) -> a -> a
dapp = \f x -> f x x
ghci> dapp (*) 5
25
Run Code Online (Sandbox Code Playgroud)
我们可以缩短它吗?我们问lambdabot:
lambdabot> @pl \f x -> f x x
join
Run Code Online (Sandbox Code Playgroud)
万岁!我们来试试吧:
import Control.Monad (join)
dapp :: (a -> a -> a) -> a -> a
dapp = join
Run Code Online (Sandbox Code Playgroud)
但它不起作用:(
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
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我输错了join吗?join在Hoogle上我找不到另一个.
| 归档时间: |
|
| 查看次数: |
191 次 |
| 最近记录: |