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