After revisiting my MaybeT
excercise I got warning that I should also have Applicative
instance. I tried to implement it but got stuck as I cannot find way to apply m x
to m f
with Applicative m
. Do I need Monad m
?
newtype MaybeT m x = MaybeT { runMaybeT :: m (Maybe x) }
instance Functor m => Functor (MaybeT m) where
fmap f m = MaybeT $ fmap z $ runMaybeT m where
z (Just x) = Just $ f x
z Nothing = Nothing
instance Applicative m => Applicative (MaybeT m)