下面是一个高阶函数,它将一个参数应用于给定函数两次:
dapp :: (a -> a -> a) -> a -> a
dapp = \f x -> f x x
ghci> dapp (*) 5
25我们能长话短说吗?让我们问问lambdabot:
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?我在胡格尔上找不到另一个join。
发布于 2013-04-23 06:04:19
Until recently、用于(->) r的Functor和Monad实例是Control.Monad.Instances中的orphan instances。
然而,从base-4.6.0.0 (GHC7.6.1)开始,这些实例已经被移动到Prelude和Control.Monad.Instances has been deprecated (现在是空的)。
因此,要使用这些实例,请导入Control.Monad.Instances或升级您的GHC。
https://stackoverflow.com/questions/16155629
复制相似问题