Fix AMP warnings for MaybeT/MaybeErr
authorAustin Seipp <austin@well-typed.com>
Tue, 14 Jan 2014 00:39:10 +0000 (18:39 -0600)
committerAustin Seipp <austin@well-typed.com>
Tue, 14 Jan 2014 09:46:08 +0000 (03:46 -0600)
Signed-off-by: Austin Seipp <austin@well-typed.com>
compiler/utils/Maybes.lhs

index 859908e..3c943bd 100644 (file)
@@ -20,7 +20,8 @@ module Maybes (
 
         MaybeT(..)
     ) where
-
+import Control.Applicative
+import Control.Monad
 import Data.Maybe
 
 infixr 4 `orElse`
@@ -95,6 +96,10 @@ newtype MaybeT m a = MaybeT {runMaybeT :: m (Maybe a)}
 instance Functor m => Functor (MaybeT m) where
   fmap f x = MaybeT $ fmap (fmap f) $ runMaybeT x
 
+instance (Monad m, Functor m) => Applicative (MaybeT m) where
+  pure  = return
+  (<*>) = ap
+
 instance Monad m => Monad (MaybeT m) where
   return = MaybeT . return . Just
   x >>= f = MaybeT $ runMaybeT x >>= maybe (return Nothing) (runMaybeT . f)
@@ -112,6 +117,13 @@ instance Monad m => Monad (MaybeT m) where
 \begin{code}
 data MaybeErr err val = Succeeded val | Failed err
 
+instance Functor (MaybeErr err) where
+  fmap = liftM
+
+instance Applicative (MaybeErr err) where
+  pure  = return
+  (<*>) = ap
+
 instance Monad (MaybeErr err) where
   return v = Succeeded v
   Succeeded v >>= k = k v