Oct. 23rd, 2019

juan_gandhi: (Default)
Предположим, мы зафигачим такой класс:

sealed trait EitherTree[T] {
def map[U](f: T => U): EitherTree[U]
def flatMap[U](f: T => EitherTree[U]): EitherTree[U]
}

case class Right[T](v: T) extends EitherTree[T] {
def map[U](f: T => U): Right[U] = Right(f(v))

override def flatMap[U](f: T => EitherTree[U]): EitherTree[U] = f(v)
}

sealed trait Left[T] extends EitherTree[T] {
def map[U](f: T => U): Left[U]
def flatMap[U](f: T => EitherTree[U]): Left[U]
}

case class LeftLeaf[T](cause: Exception) extends Left[T] {
def map[U](f: T => U): LeftLeaf[U] = LeftLeaf[U](cause)

override def flatMap[U](f: T => EitherTree[U]): LeftLeaf[U] = LeftLeaf[U](cause)
}

case class LeftTree[T](first: Left[T], second: Left[T]) extends Left[T] {
def map[U](f: T => U): LeftTree[U] = LeftTree[U](first.map(f), second.map(f))

override def flatMap[U](f: T => EitherTree[U]): LeftTree[U] =
LeftTree[U](first.flatMap(f), second.flatMap(f))
}

Ну так чо, будет у нас монада?

Такое ощущение, что каждый скальщик будет горячо кивать головой.


Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

September 2025

S M T W T F S
 1 2345 6
78 9 10 111213
14151617181920
21222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 14th, 2025 11:09 pm
Powered by Dreamwidth Studios