7 import Control.Applicative
10 instance Functor ((,,) a b) where fmap f (x, y, z) = (x, y, f z)
12 :: Parser t s m a = Parser (s [t] -> m (s, [t], a))
14 runParser (Parser t) = t
16 instance Functor (Parser t s m) | Functor m where fmap f fa = Parser \s t->fmap f <$> runParser fa s t
17 instance pure (Parser t s m) | Applicative m where pure a = Parser \s t->pure (s, t, a)
18 instance <*> (Parser t s m) | Monad m where (<*>) fab fa = ap fab fa
19 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