EK
А были ли попытки сделать дырко-полиморфные системы эффектов?
Size: a a a
EK
EK
Oℕ
Oℕ
Oℕ
Oℕ
Oℕ
class XTagи дальше внутри трейта сделать соответствующие замены
class YTag[A, B]
class ZTag[F[_]]
X -> F[XTag]
Y[A, B] -> F[YTag[A, B]]
Z[F] -> F[ZTag[F]]
Oℕ
X -> Int
Y[A, B] -> Either[A, B]
Z[F[_]] -> Ref[F, String]
в скале 2 вам пришлось бы придумывать специальное семействоsealed trait Subst[Tag]
case class XSubst(i: Int) extends Subst[XTag]
case class YSubst[A, B](e: Either[A, B]) extends Subst[YTag[A, B]]
case class ZSubst[F[_]](r: Ref[F, String]) exends Subst[ZTag[F]]
и это сработало везде, где вы можете решить проблему с помощью изоморфизмаtype Subst[Tag] = Tag matchи вы получаете конструктивно равенство
case XTag => Int
case YTag[a, b] => Either[a, b]
case ZTag[f] => Ref[f, String]
Oℕ
AT
Oℕ
Oℕ
Oℕ
Oℕ
Oℕ
def foo = readCurrentConfig.flatMap(cfg => action(cfg) *> foo.provideSome(withNewCfg(cfg)))
Oℕ
Oℕ
Oℕ
Provide(r: R, F[A, Read[R] & Stack]) extends Effect[A, Stack]
Oℕ
Oℕ