使用" ap"的正确方法是什么?哈斯克尔的莫纳德?我想做类似的事情:
main = (putStr . ap (++) show) "main = (putStr . ap (++) show) "
但我收到错误"不在范围内:' ap'。"
使用"导入Control.Monad"什么也没做。 我试过给它
"ap :: Monad m => m (a -> b) -> m a -> m b"
然后我得到"'ap'的类型签名没有伴随的约束"
答案 0 :(得分:10)
导入Control.Monad
应该会为您提供ap
。但是,除了最新版本的GHC(7.6.1和更新版本)之外,您还需要导入Control.Monad.Instances
以使用monad实例来实现功能。
或者,您可以导入Control.Applicative
,其中<*>
运算符({1}}已归一化为ap
,以及将其与函数一起使用的必要实例