Rewrite Applicative/Monad instances into normal-form
authorHerbert Valerio Riedel <hvr@gnu.org>
Sat, 17 Oct 2015 17:41:35 +0000 (19:41 +0200)
committerHerbert Valerio Riedel <hvr@gnu.org>
Sat, 17 Oct 2015 17:41:35 +0000 (19:41 +0200)
I.e. make sure `return` is defined in terms of `pure` rather than the
other way round.

CrossCodegen.hs
HSCParser.hs

index c1d627d..a8a7f3d 100644 (file)
@@ -52,11 +52,11 @@ instance Functor TestMonad where
     fmap = liftM
 
 instance Applicative TestMonad where
-    pure = return
+    pure a = TestMonad (\_ c -> pure (Right a, c))
     (<*>) = ap
 
 instance Monad TestMonad where
-    return a = TestMonad (\_ c -> return $ (Right a, c))
+    return = pure
     x >>= fn = TestMonad (\e c -> (runTest x e c) >>=
                                       (\(a,c') -> either (\err -> return (Left err, c'))
                                                          (\result -> runTest (fn result) e c')
index 745037f..b09213b 100644 (file)
@@ -25,11 +25,11 @@ instance Functor Parser where
     fmap = liftM
 
 instance Applicative Parser where
-    pure  = return
+    pure a = Parser $ \pos s -> Success pos [] s a
     (<*>) = ap
 
 instance Monad Parser where
-    return a = Parser $ \pos s -> Success pos [] s a
+    return = pure
     Parser m >>= k =
         Parser $ \pos s -> case m pos s of
             Success pos' out1 s' a -> case k a of