Oℕ
Size: a a a
Oℕ
Oℕ
В
R
Oℕ
Oℕ
Oℕ
ΛВ
R
А
val zfun: URIO[Int, Int] = ZIO.fromFunction((i: Int) => i * i)как ее собственно потом вызвать с параметром и получить результат?
IL
val zfun: URIO[Int, Int] = ZIO.fromFunction((i: Int) => i * i)как ее собственно потом вызвать с параметром и получить результат?
zio.Runtime.default.unsafeRun(zfun.provide(2))А
zio.Runtime.default.unsafeRun(zfun.provide(2))AS
Inl/Inr, в принципе это решает проблему + есть проверка компилятором на полноту матчинга, но выглядит немного криво:type Type = Foo :+: Bar :+: Qoo :+: CNilПонимаю как сделать объекты с unapply, чтобы получилоcь что-то типа:
def handler1(g: Group): Unit = g match {
case Inl(foo) => ???
case Inr(Inl(bar)) => ???
case Inr(Inr(Inl(qoo))) => ???
case Inr(Inr(Inr(cnil))) => cnil.impossible
}
def handler2(g: Group): Unit = {
val GetFoo = GetElement[Foo]
val GetBar = GetElement[Bar]
val GetQoo = GetElement[Qoo]
g match {
case GetFoo(foo) => ???
case GetBar(bar) => ???
case GetQoo(qoo) => ???
}
}
или обощенного обработчика в который "добавляются" обработчики для конкретного типа: def handler3(g: Group): Unit = {
val hnd = new HandlerBuilder[Unit]
.add[Foo](_ => ())
.add[Bar](_ => ())
.add[Qoo](_ => ())
.result()
hnd(g)
}
Но тут теряется проверка на полноту, то обработали все кейсы на этапе компиляции. Ну и еще вариант писать через Selector, который возращает Option. N
GP
D
GP
N