将联合类型折叠成 Either/Coproducts

Folding union-types into Either/Coproducts

给定一个 pseudo-union type in Scala.js,我如何将它折叠成 Either[A, B](或联积)?

如果您正在寻找一个函数 toEither[A, B](union: A | B): Either[A, B],那您就走运了。看到这一点的最简单方法是注意它必须适用于 AB 的任何选择,因此如果我将它们都专门化为 Unit

toEither[A, B](union: A    | B   ): Either[A, B]
toEither      (union: Unit | Unit): Either[Unit, Unit]
toEither      (union: Unit       ): Either[Unit, Unit]

很明显,任何此类函数都需要做出任意选择,因此不会真正存在此类函数。用其他类型 CA = B = C.

试试这个练习

通常,当您认识到某些 Javascript 函数采用几种不同类型的值并在运行时区分它们时,联合类型很方便,但它们的用处也不如 Either

一般来说,一个函数toUnion[A, B](eit: Either[A, B]): A | B只做一件事:"forgetting"一个值是"Left"还是"Right"进入无微分并。随着这些信息的销毁,您前进的选择越来越少。