diff options
Diffstat (limited to 'src/runtime/haskell/PGF')
| -rw-r--r-- | src/runtime/haskell/PGF/TypeCheck.hs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/runtime/haskell/PGF/TypeCheck.hs b/src/runtime/haskell/PGF/TypeCheck.hs index 0818aeb4a..8860ed17b 100644 --- a/src/runtime/haskell/PGF/TypeCheck.hs +++ b/src/runtime/haskell/PGF/TypeCheck.hs @@ -37,6 +37,7 @@ import Data.Map as Map import Data.IntMap as IntMap import Data.Maybe as Maybe import Data.List as List +import Control.Applicative import Control.Monad --import Control.Monad.Identity import Control.Monad.State @@ -92,10 +93,18 @@ class Selector s where splitSelector :: s -> (s,s) select :: CId -> Scope -> Maybe Int -> TcM s (Expr,TType) +instance Applicative (TcM s) where + pure = return + (<*>) = ap + instance Monad (TcM s) where return x = TcM (\abstr k h -> k x) f >>= g = TcM (\abstr k h -> unTcM f abstr (\x -> unTcM (g x) abstr k h) h) +instance Selector s => Alternative (TcM s) where + empty = mzero + (<|>) = mplus + instance Selector s => MonadPlus (TcM s) where mzero = TcM (\abstr k h ms s -> id) mplus f g = TcM (\abstr k h ms s -> let (s1,s2) = splitSelector s |
