diff --git a/Base.lhs b/Base.lhs index c26e048..46c68de 100644 --- a/Base.lhs +++ b/Base.lhs @@ -38,3 +38,4 @@ > import Prettier -> import Control.Monad ( MonadPlus(..) ) +> import Control.Applicative +> import Control.Monad > import System.IO @@ -117,2 +118,9 @@ A simple exception monad. +> instance Functor Result where +> fmap = liftM + +> instance Applicative Result where +> pure = return +> (<*>) = ap -- defined in Control.Monad + > instance Monad Result where @@ -123,2 +131,6 @@ A simple exception monad. +> instance Alternative Result where +> (<|>) = mplus +> empty = mzero + > instance MonadPlus Result where diff --git a/Compact.lhs b/Compact.lhs index 6886a6a..84f125c 100644 --- a/Compact.lhs +++ b/Compact.lhs @@ -54,3 +54,3 @@ > import Data.Maybe -> import Prelude hiding ( lookup ) +> import Prelude hiding ( lookup, (<$>) ) diff --git a/Convert.lhs b/Convert.lhs index 01d2c32..d31f437 100644 --- a/Convert.lhs +++ b/Convert.lhs @@ -50,2 +50,3 @@ > import Control.Monad +> import Control.Applicative > import System.IO hiding ( isEOF ) @@ -235,2 +235,9 @@ Writer monad for collecting multiple error messages. +> instance Functor (Writer w) where +> fmap = liftM + +> instance Applicative (Writer w) where +> pure = return +> (<*>) = ap -- defined in Control.Monad + > instance Monad (Writer w) where diff --git a/GParser2.hs b/GParser2.hs index 0cb4c21..1597acc 100644 --- a/GParser2.hs +++ b/GParser2.hs @@ -41,2 +41,5 @@ where + import Prelude hiding ((<$>)) + import Control.Applicative hiding ((<$>)) + import Control.Monad hiding ( guard ) import Lexer2 @@ -2130,3 +2133,10 @@ -> m Answer) } - + + instance (Monad m) => Functor (Lex m) where + fmap = liftM + + instance (Monad m) => Applicative (Lex m) where + pure = return + (<*>) = ap -- defined in Control.Monad + instance (Monad m) => Monad (Lex m) where diff --git a/GParser2.lg b/GParser2.lg index e036f8f..800e245 100644 --- a/GParser2.lg +++ b/GParser2.lg @@ -41,2 +41,5 @@ Compile me with > where +> import Prelude hiding ((<$>)) +> import Control.Applicative hiding ((<$>)) +> import Control.Monad hiding ( guard ) > import Lexer2 @@ -354,2 +357,10 @@ A continuation-based state monad. > + +> instance (Monad m) => Functor (Lex m) where +> fmap = liftM + +> instance (Monad m) => Applicative (Lex m) where +> pure = return +> (<*>) = ap -- defined in Control.Monad + > instance (Monad m) => Monad (Lex m) where diff --git a/GVStack.lhs b/GVStack.lhs index acb5d96..3869493 100644 --- a/GVStack.lhs +++ b/GVStack.lhs @@ -51,3 +51,3 @@ > import Data.List ( maximumBy ) -> import Prelude hiding ( lookup ) +> import Prelude hiding ( lookup, (<$>) ) diff --git a/Lib/OrdUniqListSet.lhs b/Lib/OrdUniqListSet.lhs index ddb8629..decf65d 100644 --- a/Lib/OrdUniqListSet.lhs +++ b/Lib/OrdUniqListSet.lhs @@ -63,2 +63,3 @@ > import Control.Monad +> import Control.Applicative (Applicative, pure, (<*>)) @@ -114,2 +114,6 @@ Yes, \tr{Set} is a functor and a monad. > +> instance Applicative Set where +> pure = return +> (<*>) = ap -- defined in Control.Monad +> > instance Monad Set where diff --git a/Stackless.lhs b/Stackless.lhs index 2fb1a97..dac8ef5 100644 --- a/Stackless.lhs +++ b/Stackless.lhs @@ -53,3 +53,3 @@ > import Control.Monad -> import Prelude hiding ( lookup ) +> import Prelude hiding ( lookup, (<$>) ) diff --git a/Standard.lhs b/Standard.lhs index 9fb5305..c3fcbb0 100644 --- a/Standard.lhs +++ b/Standard.lhs @@ -52,3 +52,3 @@ > import Data.Maybe -> import Prelude hiding ( lookup ) +> import Prelude hiding ( lookup, (<$>) )