Пример аппликативной композиции в Scala

Это продолжение моих старых вопросов:

Я знаю, что монады не компонуемы, т. е. если M1[_] и M2[_] являются монадами, то M2[M1[_]] не обязательно является монадой. Например, List[Int] и Option[Int] являются монадами, но Option[List[Int]] не является автоматически монадой, и поэтому мне нужен monad transformer, чтобы использовать его как монаду (как в здесь)

Я знаю, что аппликативные функторы составимы. Я предполагаю, что это означает, что если A1[_] и A2[_] являются аппликативами, то A2[A1[_]] всегда является аппликативом. Это правильно?

Не могли бы вы привести пример такой композиции, когда A1 равно List, а A2 равно Option? Не могли бы вы привести пример составления других аппликативов?


person Michael    schedule 04.03.2015    source источник


Ответы (1)


Некоторое время назад я добавил в исходный код scalaz несколько актуальных примеров. Я добавил примеры использования составных экземпляров Apply (Apply является аппликативным без точечного метода):

https://github.com/scalaz/scalaz/blob/series/7.2.x/example/src/main/scala/scalaz/example/ApplyUsage.scala#L132-L147

но да, для любого M1[_], для которого у нас есть Applicative[M1] и M2[_], для которого у нас есть Applicative[M2], M1[M2[_]] является аппликативным, и вы можете получить экземпляр Applicative с Applicative[M1] compose Applicative[M2]

person stew    schedule 06.03.2015