Pregunta

What is the proper way to use the "ap" monad in Haskell? I want to do something similar to this:

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

but I get the error "Not in scope: 'ap'."

Using "import Control.Monad" does nothing. And I have tried giving it

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

then I get "The type signature for `ap' lacks an accompanying binding"

¿Fue útil?

Solución

Importing Control.Monad should give you ap. However, in all but the most recent versions of GHC (7.6.1 and newer), you'll also need to import Control.Monad.Instances to use the monad instance for functions.

Alternatively, you can import Control.Applicative which gives you the <*> operator, which is ap generalized to Applicative, as well as the necessary instances to use it with functions.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top