@@ -9,19 +9,29 @@ newtype MyErrorT m a = MyErrorT { runMyErrorT :: m (Either String a) }
99instance  Monad m  =>  Monad MyErrorT  m ) where 
1010 return  =  pure 
1111 x >>=  y =  MyErrorT  $  do 
12-  res <-  x
12+  res <-  runMyErrorT  x
1313 case  res of 
14-  Right ->  return $ runMyErrorT $  y res  
14+  Right ->  runMyErrorT $  y val  
1515 Left ->  return  $  Left 
1616
1717instance  Monad m  =>  Functor MyErrorT  m ) where 
1818 fmap  =  liftM 
1919
2020instance  Monad m  =>  Applicative MyErrorT  m ) where 
21-  pure  a  =  MyErrorT  $  return  $  Right  a 
21+  pure  =  MyErrorT  .  return  .  Right 
2222 (<*>)  =  ap
2323
2424instance  MonadTrans  MyErrorT  where 
25-  lift m =  MyErrorT  $  liftM Right 
26- 27- 25+  lift m =  MyErrorT  $  do 
26+  m' <-  m
27+  return  $  Right 
28+ 29+ throw  ::  Monad m  =>  String ->  MyErrorT  m  a 
30+ throw =  MyErrorT  .  return  .  Left 
31+ 32+ catch  ::  Monad m  =>  MyErrorT  m  a  ->  (String ->  MyErrorT  m  a ) ->  MyErrorT  m  a  
33+ catch m c =  MyErrorT  $  do 
34+  m' <-  runMyErrorT m
35+  case  m' of 
36+  Left ->  runMyErrorT $  c err
37+  Right ->  runMyErrorT m
0 commit comments