Futures in Haskell
Does Haskell have an equivalent of Alice's ability to bind a variable to a future?
val a = spawn foo;
where foo is some functio开发者_开发技巧n.
I know Haskell supports channels and threads; I'm hoping for syntax as natural as Alice's to bind a value to a future and spawn a thread to calculate it without having to deal with the details.
You can use par
from Control.Parallel
as in
a `par` f a b c
where
a = foo
This is a hint to the runtime that a
could be evaluated in another thread.
Funny, I was just reading a new post by Simon Marlow: Parallel programming in Haskell with explicit futures. Apparently he and others have been working on some new parallel programming abstractions that are intended to be more natural and explicit than the par
and pseq
APIs.
Not in the standard library, but
http://ghcmutterings.wordpress.com/2010/08/20/parallel-programming-in-haskell-with-explicit-futures/
data Future a = Future a
fork :: Eval a -> Eval (Future a)
fork a = do a' <- rpar (runEval a); return (Future a')
join :: Future a -> Eval a
join (Future a) = a `pseq` return a
精彩评论