> > > I can't test it right now, but wouldn't the > > following do the job in the Identity monad? > > > forkExec :: Identity a -> Identity (Identity a) > > forkExec k = let result = runIdentity k > > in result `par` return (Identity result) > > > Since Identity is a newtype, would that be equivalent to "result `par` > result"? The forkExec in the IO monad let's other computations keep > going until I need the result from the forked computation.
You're right, it doesn't seem to work the way I hoped. The equivalent function on Maybe monad works, though, so it is possible to write forkExec in monads other than IO. > In a pure computation, I can already get the same result with `par` > and laziness, right? Yes. The goal is to enable writing monadic parallel computations which work under any parallelizable monad. For example, I'm using it to run two trampolining producer/consumer coroutines in parallel. A large majority of interesting coroutines I have are completely agnostic with respect to the underlying monad. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe