Hello,

I am start with example. Suppose I have the following type synonym:

type SomeMonad a = ErrorT String (ReaderT  String IO) a

this is monad, and I want to make it instance of Applicative, so, the
obvious way is to write the following:

instance Applicative SomeMonad where
  pure = return
  (<*>) = ap

GHCi warns me, that I have to use -XTypeSynonymInstances option to
allow this construction, but than I have following
error:

    Type synonym `SomeMonad' should have 1 argument, but has been given 0
    In the instance declaration for `Applicative SomeMonad'

Neither `instance Applicative (SomeMonad a)` nor `instance Applicative
SomeMonad a` help. But works the following:

instance Applicative (ErrorT String (ReaderT String IO)) where
  pure = return
  (<*>) = ap

Which is the same (from my point of view).

Could anyone tell me what is going on, and how to declare SomeMonad as
instance of Applicative ?

Thanks,
Vasyl
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to