2010-08-21 88 views
11

Haskell是否具有相当于Alice将变量绑定到未来的能力?Haskell的期货

val a = spawn foo; 

其中foo是一些函数。

我知道Haskell支持通道和线程;我希望Alice的语法像Alice的一样自然,将价值绑定到未来,并产生一个线程来计算它,而不必处理细节。

+0

无关,但实际上的Clojure有那么些为好。 – Rayne 2010-08-21 13:28:25

+0

我从来没有考虑过这个问题,但我怀疑懒惰的IO可以做得很干净,尽管它可能有不安全的InterleaveIO。 – 2010-08-22 19:59:07

回答

15

您可以使用从Control.Parallelpar

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

这是一个提示到a可能在另一个线程来评估运行。

+1

谢谢,效果很好 – Hosiers 2010-08-21 14:42:03

7

不标准的库,但

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

“平行”是Haskell平台的一部分,常规懒惰期货('par')已经是其中的一部分。 – 2010-08-21 15:23:13

+0

为什么标准库中没有'Future' api?对于我来说,这比我更容易理解。 – 2013-05-10 06:26:13