Чем являются стандартные монады Scala, кроме Option? - PullRequest
9 голосов
/ 13 февраля 2012

Option монада превращает довольно много объектов в Скала.В стандартной библиотеке Scala есть другие монады?

Ответы [ 3 ]

12 голосов
/ 13 февраля 2012

Ответ Луиджи правильный, но не очень информативный, ИМХО.

Все коллекции могут реализовывать интерфейс монады, но подпись для flatMap в них не является плоской картой монады. Тем не менее, большую часть времени они будут вести себя как монады. Почти все классы, перечисленные Луиджи, относятся к коллекциям.

LeftProject и RightProject относятся к Either. По сути, Either не является монадой, но если вы «проецируете» одну из сторон, то эта сторона действует во многом как Option монада.

Parser - это монада, которая составляет основу комбинаторов синтаксического анализа.

Признаюсь, я не узнаю ControlContext. Интересно, связано ли это с продолжениями (которые тоже являются монадами).

11 голосов
/ 13 февраля 2012

Вы можете решить эту проблему, посмотрев контрольный сигнал flatMap в индексе API . Это дает:

FilterMonadic 
Stream 
StreamWithFilter 
TraversableMethods 
Iterator 
ParIterableLike 
ParIterableLike 
ParIterableViewLike 
TraversableLike 
WithFilter 
MonadOps 
TraversableProxyLike 
TraversableViewLike 
LeftProjection 
RightProjection 
Option 
WithFilter 
Responder 
Zipped 
ControlContext
Parser 
1 голос
/ 13 февраля 2012

Вот ссылки на три исходных файла из Scalaz:

Взгляните на объявления экземпляров. Это может дать вам представление о том, какие типы из стандартной библиотеки удовлетворяют монадическому интерфейсу.

...