2015-09-04 12 views
10

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) 

Odpowiedz

10

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.

+1

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"! –