-   
- data Result a e = Ok a | Error e 
-   
- newtype StateError s e a = StateError { runStateError :: s -> (Result a e, s) } 
-   
- instance Functor (- StateError s e ) where
 
-   fmap-  f x  =-  x  >>= (- pure  .-  f )
 
-   
- instance Applicative (StateError s e) where 
-   pure x = StateError $ \s -> (Ok x, s) 
-   x <*> y = ap x y 
-   
- instance Monad (- StateError s e ) where
 
-   
-   m >>= f = StateError $ 
-     \s -> case runStateError m s of 
-             (Ok x, s1) -> runStateError (f x) s1 
-             (Error e, s1) -> (Error e, s1) 
-   
- get = StateError $ \s -> ((Ok s), s) 
-   
- put s = StateError $ \_ -> ((Ok ()), s) 
-   
				aW1wb3J0IENvbnRyb2wuTW9uYWQKCmRhdGEgUmVzdWx0IGEgZSA9IE9rIGEgfCBFcnJvciBlCgpuZXd0eXBlIFN0YXRlRXJyb3IgcyBlIGEgPSBTdGF0ZUVycm9yIHsgcnVuU3RhdGVFcnJvciA6OiBzIC0+IChSZXN1bHQgYSBlLCBzKSB9CgppbnN0YW5jZSBGdW5jdG9yIChTdGF0ZUVycm9yIHMgZSkgd2hlcmUKICBmbWFwIGYgeCA9IHggPj49IChwdXJlIC4gZikKCmluc3RhbmNlIEFwcGxpY2F0aXZlIChTdGF0ZUVycm9yIHMgZSkgd2hlcmUKICBwdXJlIHggPSBTdGF0ZUVycm9yICQgXHMgLT4gKE9rIHgsIHMpCiAgeCA8Kj4geSA9IGFwIHggeQogIAppbnN0YW5jZSBNb25hZCAoU3RhdGVFcnJvciBzIGUpIHdoZXJlCiAgcmV0dXJuIHggPSBwdXJlIHgKCiAgbSA+Pj0gZiA9IFN0YXRlRXJyb3IgJAogICAgXHMgLT4gY2FzZSBydW5TdGF0ZUVycm9yIG0gcyBvZgogICAgICAgICAgICAoT2sgeCwgczEpIC0+IHJ1blN0YXRlRXJyb3IgKGYgeCkgczEKICAgICAgICAgICAgKEVycm9yIGUsIHMxKSAtPiAoRXJyb3IgZSwgczEpCgpnZXQgPSBTdGF0ZUVycm9yICQgXHMgLT4gKChPayBzKSwgcykKCnB1dCBzID0gU3RhdGVFcnJvciAkIFxfIC0+ICgoT2sgKCkpLCBzKQoKbWFpbiA9IHJldHVybiAoKQ==