
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