W ghci
, wpadłem:`Prawo 5` w Haskell i Scala
ghci> :t Right 5
Right 5 :: Num b => Either a b
Co to ma znaczyć a
?
Jak to się dzieje w porównaniu z wersją Scali?
scala> Right(5)
res0: scala.util.Right[Nothing,Int] = Right(5)
W ghci
, wpadłem:`Prawo 5` w Haskell i Scala
ghci> :t Right 5
Right 5 :: Num b => Either a b
Co to ma znaczyć a
?
Jak to się dzieje w porównaniu z wersją Scali?
scala> Right(5)
res0: scala.util.Right[Nothing,Int] = Right(5)
a
jest b
jak w tym przykładzie, zmienna typu. Może być tworzony z dowolnego typu (podczas gdy b
może być tworzony z dowolnego typu, który spełnia ograniczenie, że jest to również instancja o numerze Num
).
Przykład scala działa zupełnie inaczej, ponieważ system typu scala jest zupełnie inny; Nie ma prawdziwej koncepcji wartości, która kiedykolwiek miałaby nie w pełni utworzony typ, więc musisz przypisać typ do wartości Left
swojej wartości Either
. Poza kolejnymi ograniczeniami, po prostu kończy się to Nothing
. Ze względu na sposób działania systemu scala (Nothing
jest podtypem dowolnego innego typu, więc możesz myśleć o nim jako o typie podwójnym w stosunku do typu Any
), Either[Nothing,B]
jest także Either[A,B]
dla dowolnego A
.
Po prostu chciałem zauważyć, że "Any" i "Nic" są podwójne, ponieważ są dokładnymi przeciwieństwami: "Any" jest uniwersalnym supertypem, "Nic" jest uniwersalnym podtypem. Naturalnie żadna wartość nie może być typu "Nic": idealna do opisania lewej części "Prawa"! –