2015-09-04 8 views
10

In ghci, mi sono imbattuto:`Proprio 5` in Haskell e Scala

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

Qual è il significato di a?

Come si confronta con la versione di Scala?

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

risposta

10

a è, come b in questo esempio, una variabile di tipo. Può essere istanziato con qualsiasi tipo (mentre b può essere istanziato con qualsiasi tipo che soddisfi il vincolo che sia anche un'istanza di Num).

L'esempio scala funziona in modo molto diverso a causa del sistema di tipo scala che è piuttosto diverso; Non esiste un vero concetto di valore che abbia mai un tipo non completamente istanziato, quindi è necessario assegnare un tipo alla possibilità Left del valore Either. Salvo ulteriori limitazioni, questo termina semplicemente con Nothing. A causa del modo in cui il sistema di tipo scala funziona (Nothing è un sottotipo di qualsiasi altro tipo, quindi è possibile considerarlo un duale al tipo Any) un per qualsiasi A.

+1

Volevo solo notare che 'Any' e' Nothing' sono duali in quanto sono opposti esatti: "Any' è il tipo super universale,' Nothing' è il sottotipo universale. Naturalmente, nessun valore può essere di tipo 'Nothing': perfetto per descrivere la parte sinistra di un' Right'! –