Attualmente sto imparando Scala, e voleva replicare questo Haskell algebrica tipo di dati:È possibile utilizzare `caso caso` con un parametro di tipo?
data Tree = Empty
| Leaf Int
| Node Tree Tree
Questo è quello che mi è venuta in Scala:
sealed trait Tree[T]
case class Empty[T]() extends Tree[T]
case class Leaf[T](value: T) extends Tree[T]
case class Node[T](left: Tree[T], right: Tree[T]) extends Tree[T]
Tuttavia, qualcuno mi ha detto che ho dovrebbe usare un case object
per Empty
, che suppongo sia vero dal momento che non accetta parametri - ma di nuovo richiede un parametro di tipo.
Ho provato quanto segue ma nessuno di loro compilazione:
case object Empty[T] extends Tree[T]
case object Empty extends Tree[T]
case object Empty extends Tree
quindi mi chiedo se c'è un modo per utilizzare case object
in questo caso o no.
Un singleton non può avere un parametro di tipo. Forse vuoi 'oggetto Case Empty extends Tree [Nothing]' –
'case object Empty extends Tree [Nothing]', poiché 'Nothing' è un sottotipo di ogni altro tipo. –
Grazie per i commenti esplicativi! –