Sorry to use Monad as the example, I meant this one:
 run :: MonadTrans m => m IO a -> IO a

And Daniel, I do not think adding another type "b" a good idea. Since
"run" could actually return any inside type (depending on another
function that passed to it). Even simple as different tuples would
destroy this solution.

On Fri, May 4, 2012 at 10:05 PM, Daniel Díaz Casanueva
<dhelta.d...@gmail.com> wrote:
> 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.



-- 
竹密岂妨流水过
山高哪阻野云飞

And for G+, please use magiclouds#gmail.com.

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to