purescript-0.15.15: tests/purs/passing/Superclasses3.purs
module Main where
import Prelude
import Effect.Console
import Effect
class Monad m <= MonadWriter w m where
tell :: w -> m Unit
testFunctor :: forall m. Monad m => m Number -> m Number
testFunctor n = (+) 1.0 <$> n
test :: forall w m. Monad m => MonadWriter w m => w -> m Unit
test w = do
tell w
tell w
tell w
data MTrace a = MTrace (Effect a)
runMTrace :: forall a. MTrace a -> Effect a
runMTrace (MTrace a) = a
instance functorMTrace :: Functor MTrace where
map = liftM1
instance applyMTrace :: Apply MTrace where
apply = ap
instance applicativeMTrace :: Applicative MTrace where
pure = MTrace <<< pure
instance bindMTrace :: Bind MTrace where
bind m f = MTrace (runMTrace m >>= (runMTrace <<< f))
instance monadMTrace :: Monad MTrace
instance writerMTrace :: MonadWriter String MTrace where
tell s = MTrace (log s)
main = runMTrace $ test "Done"