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

October 2025

S M T W T F S
    1 23 4
5 678 9 1011
12 13 1415 161718
19202122232425
262728293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 17th, 2025 12:20 am
Powered by Dreamwidth Studios