interface Monad<Value, Effect>{
value: Value,
effect: Effect
Monad Join(a,f) {
(_, effect1) =a
(value, effect2) =f(a)
return Monad(value = value, effect = effect1 + effect2)
}
}
class Maybe<T> : Monad<T, Bool> {
value: T,
effect: Bool // наличие/неналичие значения
Maybe Join(a, f){
(_, exist1) = a
(value, exist2) = f(a)
return Maybe(value = value, effect = exist1 && exist2)
}
}
Кривое объяснение в терминах ООП на несуществующем яп