Пример использования скалаза Монад - PullRequest
7 голосов
/ 04 декабря 2010

Кто-нибудь может привести пример использования scalaz Monad для простой, но нетривиальной и практически полезной задачи?

1 Ответ

16 голосов
/ 05 декабря 2010

scalaz.Monad и семейство классов связанных типов, абстрагируют некоторые общие функциональные возможности для широкого спектра типов.Scalaz предоставляет функции общего назначения, которые работают для any Monad;и вы можете писать свои собственные функции таким же образом.

Без этой абстракции вы будете вынуждены писать эти функции для каждого нового монадического типа, с которым вы встречаетесь, например, List, Parser, Option,Это утомительно!

Вот примеры нескольких предоставленных функций, работающих с парой монадических типов.Мой любимый sequence:

scala> 1.pure[Option].pure[Option]
res1: Option[Option[Int]] = Some(Some(1))

scala> res1.join
res2: Option[Int] = Some(1)

scala> List(1.some, 2.some).sequence
res3: Option[List[Int]] = Some(List(1, 2))

scala> List(1.some, none[Int]).sequence
res4: Option[List[Int]] = None

scala> List(1.pure[Function0])      
res5: List[() => Int] = List(<function0>)

scala> res5.sequence
res6: () => List[Int] = <function0>

scala> res6()
res7: List[Int] = List(1)

scala> true.some ifM(none[Int], 1.some)
res8: Option[Int] = None

scala> false.some ifM(none[Int], 1.some)
res9: Option[Int] = Some(1)
...