\begin{slide}{Monadisches Verketten von Parsern}

\begin{verbatim}
instance Monad ( Parser c ) where
    return x = Parser $ \ s -> 
        return ( x, s ) 
    Parser f >>= g = Parser $ \ s -> do
        ( a, t ) <- f s 
        let Parser h = g a
        h t
\end{verbatim}

beachte: das \emph{return/do} gehört zur List-Monade

\begin{verbatim}
p :: Parser c (c,c)
p = do x <- next ; y <- next ; return (x,y)
\end{verbatim}

\end{slide}
