2010-08-21 12 views
11

¿Tiene Haskell un equivalente de la capacidad de Alicia de vincular una variable a un futuro?Futuros en Haskell

val a = spawn foo; 

donde foo es alguna función.

Sé que Haskell admite canales e hilos; Espero una sintaxis tan natural como la de Alice para vincular un valor a un futuro y engendrar un hilo para calcularlo sin tener que lidiar con los detalles.

+0

no relacionados, pero en realidad tiene Clojure esos también. – Rayne

+0

Nunca he investigado esto por mi cuenta, pero sospecho que se puede hacer que IO flojo lo haga de una manera realmente ordenada, aunque puede tener InterleaveIO inseguro bajo el capó. –

Respuesta

15

Puede utilizar par de Control.Parallel como en

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

Ésta es una sugerencia para el tiempo de ejecución que a pudieron ser evaluados en otro hilo.

+1

gracias, que funciona bien – Hosiers

12

Es curioso, estaba leyendo una nueva publicación de Simon Marlow: Parallel programming in Haskell with explicit futures. Aparentemente, él y otros han estado trabajando en algunas abstracciones de programación paralelas nuevas que pretenden ser más naturales y explícitas que las API par y pseq.

7
No

en la biblioteca estándar, pero

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

"paralelo" es parte de la plataforma Haskell, y los futuros perezosos regulares ('par') ya son parte de ella. –

+0

¿Por qué esta api 'Future' no está en la biblioteca estándar? Esto es mucho más fácil para mí razonar que 'par' y co. –