2010-08-21 85 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