Não trabalha com sequenciamento
Eu tenho esse tipo, basicamente uma seta Kleisli:
{-# language DeriveFunctor #-}
data Plan m i o = Plan (i -> m o) deriving Functor
instance (Monad m) => Applicative (Plan m i) where
pure x = Plan (\_ -> pure x)
Plan f <*> Plan x = Plan (\i -> f i <*> x i)
Uma vez que tem umApplicative
exemplo, eu ligoApplicativeDo
e tente criar um valor usando do-notation:
{-# language ApplicativeDo #-}
myplan :: Plan IO () ()
myplan = do
pure ()
pure ()
Não funciona:
No instance for (Monad (Plan IO ())) arising from a do statement
Existe uma maneira de fazê-lo funcionar? Estou usando o GHC 8.0.1.