2015-09-04 70 views
10

ghci,我跑:`5`權在Haskell和Scala

ghci> :t Right 5 
Right 5 :: Num b => Either a b 

什麼的a意思?

它與Scala的版本相比如何?

scala> Right(5) 
res0: scala.util.Right[Nothing,Int] = Right(5) 

回答

10

a是,像b在這個例子中,類型的變量。它可以用任何類型實例化(而b可以用滿足約束條件的任何類型實例化,它也是Num的一個實例)。

由於scala的類型系統非常不同,scala示例的工作原理完全不同,有沒有一個真正的價值觀沒有一個完全實例化的類型,所以你需要爲你的Either價值的可能性分配一個類型。除了進一步的限制,這只是Nothing。由於scala的類型系統的工作方式(Nothing是任何其他類型的子類型,因此您可以將其視爲Any類型的雙重對象),對於任何AEither[Nothing,B]也是Either[A,B]

+1

只是想指出,「任何」和「無」是雙重的,因爲它們是完全相反的:「任何」都是通用超類型,「無」是通用子類型。當然,沒有價值可以是'Nothing'類型:完美地描述'Right'的左邊部分! –