scalabook

Форк
0
/
free-monads.md 
41 строка · 1.9 Кб

Свободная монада

Формальное определение

Свободная монада обеспечивает:

  • абстрактное синтаксическое дерево (AST - abstract syntax tree) для выражения монадических операций
  • API для написания интерпретаторов, которые придают значение этому AST

Определение в виде кода на Scala

sealed trait Free[F[_], A]
final case class Unit[F[_], A](a: A) extends Free[F, A]
final case class FlatMap[F[_], A, B](a: Free[F, A], fx: A => Free[F, B]) extends Free[F, B]
given freeFunctor[F[_]]: Functor[[X] =>> Free[F, X]] with
extension [A](as: Free[F, A])
override def map[B](f: A => B): Free[F, B] =
FlatMap(as, a => Unit(f(a)))
given freeMonad[F[_]]: Monad[[X] =>> Free[F, X]] with
override def unit[A](a: => A): Free[F, A] = Unit(a)
extension [A](fa: Free[F, A]) override def flatMap[B](f: A => Free[F, B]): Free[F, B] = FlatMap(fa, f)

Ссылки:

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.