将联合类型折叠为Either / Coproducts

时间:2016-07-03 14:46:29

标签: scala scala.js

鉴于pseudo-union type in Scala.js,如何将其折叠为public int? UserUserId{get;set;} public virtual User User{get;set;} (或副产品)?

1 个答案:

答案 0 :(得分:3)

如果你正在寻找一个功能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正在做一件事:“忘记”值是否为“左”或“右”进入未分化联合。随着这些信息被破坏,你可以减少前进的选择。