Maciej Piechotka wrote:
class (Monad m, Monad (IO' m)) = MonadIO m where
type IO' m :: * - *
liftIO :: IO a - IO' m a
liftM :: m a - IO' m a
The signature for liftIO betrays a problem. Since liftIO is a member
of a type class, when liftIO is used in code, the type checker has to
I started playing with type families. I wanted to achieve, for the
beginning, something like:
import qualified Control.Monad.IO.Class as IOC
import Control.Monad.Trans.Class
import Control.Monad.Trans.Cont
import Data.Functor.Identity
class (Monad m, Monad (IO' m)) = MonadIO m where