Фьючерс на Хаскелл

Есть ли у Haskell эквивалент способности Алисы связывать переменную с будущим?

val a = spawn foo;

где foo - некоторая функция

Я знаю, что Haskell поддерживает каналы и потоки; Я надеюсь, что синтаксис, столь же естественный, как у Алисы, связывает значение с будущим и порождает поток для его вычисления без необходимости разбираться с деталями.

3 ответа

Решение

Ты можешь использовать 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
Другие вопросы по тегам