将联合类型折叠成 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]
,那您就走运了。看到这一点的最简单方法是注意它必须适用于 A
和 B
的任何选择,因此如果我将它们都专门化为 Unit
toEither[A, B](union: A | B ): Either[A, B]
toEither (union: Unit | Unit): Either[Unit, Unit]
toEither (union: Unit ): Either[Unit, Unit]
很明显,任何此类函数都需要做出任意选择,因此不会真正存在此类函数。用其他类型 C
和 A = B = C
.
试试这个练习
通常,当您认识到某些 Javascript 函数采用几种不同类型的值并在运行时区分它们时,联合类型很方便,但它们的用处也不如 Either
。
一般来说,一个函数toUnion[A, B](eit: Either[A, B]): A | B
只做一件事:"forgetting"一个值是"Left"还是"Right"进入无微分并。随着这些信息的销毁,您前进的选择越来越少。
给定一个 pseudo-union type in Scala.js,我如何将它折叠成 Either[A, B]
(或联积)?
如果您正在寻找一个函数 toEither[A, B](union: A | B): Either[A, B]
,那您就走运了。看到这一点的最简单方法是注意它必须适用于 A
和 B
的任何选择,因此如果我将它们都专门化为 Unit
toEither[A, B](union: A | B ): Either[A, B]
toEither (union: Unit | Unit): Either[Unit, Unit]
toEither (union: Unit ): Either[Unit, Unit]
很明显,任何此类函数都需要做出任意选择,因此不会真正存在此类函数。用其他类型 C
和 A = B = C
.
通常,当您认识到某些 Javascript 函数采用几种不同类型的值并在运行时区分它们时,联合类型很方便,但它们的用处也不如 Either
。
一般来说,一个函数toUnion[A, B](eit: Either[A, B]): A | B
只做一件事:"forgetting"一个值是"Left"还是"Right"进入无微分并。随着这些信息的销毁,您前进的选择越来越少。