-
30-09-2019 - |
質問
Haskellは、変数を未来に結合するアリスの能力に相当しますか?
val a = spawn foo;
ここで、fooは何らかの関数です。
Haskellがチャネルとスレッドをサポートしていることは知っています。私は、アリスのような自然な構文を、将来に値をバインドし、詳細に対処せずにそれを計算するためにスレッドを生成することを望んでいます。
解決
使用できます par
から Control.Parallel
のように
a `par` f a b c
where
a = foo
これは、その実行時のヒントです a
別のスレッドで評価できます。
他のヒント
面白いことに、私はサイモン・マーロウの新しい投稿を読んでいました: 明示的な未来を備えたHaskellの並列プログラミング. 。どうやら彼と他の人たちは、より自然で明示的であることを意図したいくつかの新しい並行プログラミングの抽象化に取り組んでいます。 par
と pseq
API。
標準的なライブラリではありませんが
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
所属していません StackOverflow