
You have the types of the functions commented out in the instances. If you use {-# LANGUAGE InstanceSigs #-} you can write them for real (and be sure that they're accurate)
Tom
El Jul 17, 2015, a las 3:53, Imants Cekusins
based on this snippet and Rein's comment, here is monad file template for intellij Idea to make new monads a quick exercise:
module ${PACKAGE_NAME}.${NAME} where
data ${Type} a = ${ctor} { ${prop}::a }
instance Functor ${Type} where -- (a -> b) -> f a -> f b -- fmap f (${ctor} x) = ${ctor} (f x) fmap ab fa = let a1 = ${prop} fa b1 = ab a1 in fa { ${prop} = b1 }
instance Applicative ${Type} where -- a -> f a -- pure = ${ctor} pure a = ${ctor} { ${prop} = a }
-- f (a -> b) -> f a -> f b -- ${ctor} f <*> ${ctor} x = ${ctor} (f x) (<*>) fab fa = let ab1 = ${prop} fab a1 = ${prop} fa b1 = ab1 a1 in fa { ${prop} = b1 }
instance Monad ${Type} where -- a -> m a return a = ${ctor} { ${prop} = a }
-- m a -> (a -> m b) -> m b (>>=) ma amb = let a1 = ${prop} ma in amb a1 _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners