𝛈µ
Size: a a a
𝛈µ
SA
𝛈µ
𝛈µ
SA
SA
ΛВ
SA
Functor
триггерится "тайпкласс неправильно объявлен" и т.п.𝛈µ
Functor
триггерится "тайпкласс неправильно объявлен" и т.п.𝛈µ
SA
𝛈µ
SA
𝛈µ
𝛈µ
SA
В качестве примера реализуем функтор, который возвращает значение A, содержащее в себе некоторое количество случайных бит. Наш интерфейс в Котлине так просто использовать не получится (но при желании можно), поэтому напишем extension method:
SA
𝛈µ
𝛈µ
𝛈µ
interface Monad<A> {
// монада является функтором, но map реализовывать отдельно не нужно -
// он выражается через flatMap и lift
fun <B> map(f: (A) -> B): Monad<B> = flatMap { a -> lift(f(a)) }
fun <B> flatMap(f: (A) -> Monad<B>): Monad<B>
}
fun <A> lift(value: A): Monad<A> = TODO()