2010-02-10 5 views
8

У меня был некоторый опыт работы в Haskell и в настоящее время изучается Scala. Интересно, есть ли что-то, эквивалентное Монадам в Скале?Scala эквивалентен монахам Haskell

+4

Считаете ли вы http://stackoverflow.com/questions/1992532/monad-trait-in-scala? – VonC

ответ

12

Возможно, вы захотите зарегистрироваться scalaz; на него сильно повлиял Хаскелл. Действительно, его часто спрашивали у одного из главных участников, почему они не просто, используя Haskell, так как им это так нравится!

Scalaz активно использует имплициты, чтобы украсить структуры своими монадами. Например:

val fibs = (0, 1).iterate[Stream](i => i._2 -> (i._2 + i._1)).map(_._1) 
println(fibs.take(10)) 
+0

На самом деле комментарий @VonC по моему вопросу дал мне более подробную информацию. Но я не могу принять этот ответ, а @oxbow_lakes показал мне что-то новое. Спасибо, ребята, за помощь –

+0

BTW: авторы Scalaz * do * используют Haskell. Если вы посмотрите на исходный код Scalaz, вы увидите, что они используют Haskell для системы сборки, а не Ant, например. Кроме того, Тони Моррис (главный автор) * - довольно известный программист Хакелла. Он также является автором функции FunctionalJava, которая представляет собой библиотеку, которая реализует функторы, аппликативные функторы, бифунторы, монады, комонады и стрелки для Java (как и Scalaz для Scala). И что касается использования Scala: система и язык типа Scala на самом деле в нескольких областях, более мощных и выразительных, чем Haskell's. –

+0

@Jorg - акцент изменен - ​​я знаю, что Тони использует Haskell, я подразумевал, что его спросили точно, почему * он когда-либо использовал scala! –

9

Я думаю, стоит отметить, что в Scala «для-понимания» эквивалентно Хаскель монадического «делать»

0

оба варианта и списком являются монадами. Я также считаю, что левые и правые прогнозы также являются монадами.

0

В стандартной библиотеке Scala нет явной концепции монады (нет соответствующего признака/класса или класса).

Scala имеет дело с этим в некотором роде, см. Раздел Scala by example о для ознакомления для деталей.