
4 May
2012
4 May
'12
2:05 p.m.
If one parameter is not enough, you always can add more: Test m a b = Test { f :: m IO a -> IO b } This way, if run :: m IO a -> IO a then Test run :: Test m a a But for other type for your run function run' :: m IO a -> IO b you get Test run' :: Test m a b So you can have different types in input and output. Anyway, your type 'm' is applied to other two types (m IO a), so it cannot be a monad, because monads have arity 1 as type constructors, i.e. monads have kind (* -> *). Is perhaps 'm' some kind of monad transformer? Well, that's all I can say from your explanation of the problem! Hope it helps! Daniel Díaz.