在Haskell和Scala中"正确5"

Kev*_*ith 10 haskell scala

ghci,我跑了:

ghci> :t Right 5
Right 5 :: Num b => Either a b
Run Code Online (Sandbox Code Playgroud)

这是什么意思a

它与Scala的版本相比如何?

scala> Right(5)
res0: scala.util.Right[Nothing,Int] = Right(5)
Run Code Online (Sandbox Code Playgroud)

Cub*_*bic 10

a就像b在这个例子中一样,是一个类型变量.它可以用任何类型实例化(而b可以用满足约束的任何类型实例化它也是它的实例Num).

由于scala的类型系统完全不同,scala示例的工作方式完全不同; 没有真正的值概念具有未完全实例化的类型,因此您需要为Left您的Either值的可能性指定类型.除非有进一步的限制,否则这最终会成为现实Nothing.由于scala类型系统的工作方式(Nothing作为任何其他类型的子类型,因此您可以将其视为Any类型的双重类型),a Either[Nothing,B]Either[A,B] 适用于任何类型A.