Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 function.

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.

like image 626
Hosiers Avatar asked Aug 21 '10 12:08

Hosiers


3 Answers

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.

like image 104
Daniel Avatar answered Oct 17 '22 06:10

Daniel


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.

like image 40
Daniel Pratt Avatar answered Oct 17 '22 06:10

Daniel Pratt


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
like image 44
Alexey Romanov Avatar answered Oct 17 '22 05:10

Alexey Romanov