2010-08-21 4 views
11

Haskell ha un equivalente dell'abilità di Alice di associare una variabile a un futuro?Futures in Haskell

val a = spawn foo; 

dove foo è una funzione.

So che Haskell supporta canali e thread; Spero che la sintassi sia naturale come quella di Alice per legare un valore a un futuro e generare un thread per calcolarlo senza dover gestire i dettagli.

+0

non collegati, ma Clojure ha in realtà quelli pure. – Rayne

+0

Non l'ho mai esaminato io stesso, ma sospetto che sia possibile fare un IO pigro per farlo in un modo molto accurato, sebbene possa avere un InfezionalErso sotto il cofano. –

risposta

15

È possibile utilizzare par da Control.Parallel come in

a `par` f a b c 
where 
    a = foo 

Questo è un suggerimento per il runtime che a potuto essere valutate in un altro thread.

+1

grazie, che funziona bene – Hosiers

12

Divertente, stavo leggendo un nuovo post di Simon Marlow: Parallel programming in Haskell with explicit futures. Apparentemente lui e altri hanno lavorato su alcune nuove astrazioni di programmazione parallela che sono intese per essere più naturali ed esplicite delle API par e pseq.

7

Non nella libreria standard, ma

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 
+2

"parallelo" fa parte della piattaforma Haskell, e regolari pigri futures ('par') sono già parte di esso. –

+0

Perché questa API 'Future' non è presente nella libreria standard? Questo è molto più facile per me ragionare rispetto a 'par' e co. –