6

在 Haskell 中使用“ap”monad 的正确方法是什么?我想做类似的事情:

main = (putStr . ap (++) show) "main = (putStr . ap (++) show) "

但我收到错误“不在范围内:'ap'。”

使用“import Control.Monad”什么都不做。我试过给它

"ap :: Monad m => m (a -> b) -> m a -> m b" 

然后我得到“'ap'的类型签名缺少伴随的绑定”

4

1 回答 1

10

进口Control.Monad应该给你ap。但是,除了最新版本的 GHC(7.6.1 和更高版本)之外,您还需要导入Control.Monad.Instances才能使用 monad 实例来实现函数。

或者,您可以 import Control.Applicativewhich 为您提供<*>运算符,该运算符ap泛化为Applicative,以及将其与函数一起使用的必要实例。

于 2013-04-29T17:20:41.973 回答