module test import StdEnv import Data.Tuple import Data.Functor import Control.Applicative import Control.Monad instance Functor ((,,) a b) where fmap f (x, y, z) = (x, y, f z) :: Parser t s m a = Parser (s [t] -> m (s, [t], a)) runParser (Parser t) = t instance Functor (Parser t s m) | Functor m where fmap f fa = Parser \s t->fmap f <$> runParser fa s t instance pure (Parser t s m) | Applicative m where pure a = Parser \s t->pure (s, t, a) instance <*> (Parser t s m) | Monad m where (<*>) fab fa = ap fab fa instance Monad (Parser t s m) | Monad m where bind ma a2mb = Parser \s t->runParser ma s t >>= \(s, t, a)->runParser (a2mb a) s t Start = 42