Ответ 1
Вы можете использовать par
от Control.Parallel
, как в
a `par` f a b c
where
a = foo
Это подсказка для времени выполнения, которое a
может быть оценено в другом потоке.
Есть ли у Haskell эквивалент способности Алисы связать переменную с будущим?
val a = spawn foo;
где foo - некоторая функция.
Я знаю, что Haskell поддерживает каналы и потоки; Я надеюсь на синтаксис, столь же естественный, как Алиса, чтобы привязать значение к будущему и создать поток для вычисления его без необходимости иметь дело с деталями.
Вы можете использовать par
от Control.Parallel
, как в
a `par` f a b c
where
a = foo
Это подсказка для времени выполнения, которое a
может быть оценено в другом потоке.
Забавно, я просто читал новый пост Симона Марлоу: Параллельное программирование в Haskell с явным фьючерсом. По-видимому, он и другие работают над некоторыми новыми абстракциями параллельного программирования, которые призваны быть более естественными и явными, чем API-интерфейсы par
и pseq
.
Не в стандартной библиотеке, но
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