Guardando il codice seguente:È comune utilizzare lo stesso nome per il tipo di dati e il costruttore di valori in Haskell?
data Point = Point Float Float deriving (Show)
data Shape = Circle Point Float | Rectangle Point Point deriving (Show)
che è dal libro Imparare una Haskell per la Gran Buono, che accompagna questo esempio di codice con il seguente testo:
Si noti che quando si definisce un punto , abbiamo usato lo stesso nome per il tipo di dati e il costruttore di valori. Questo non ha significato speciale, sebbene sia comune usare lo stesso nome del tipo se c'è un solo costruttore di valori.
Ora la mia ipotesi è che data Point = ...
è il tipo di dati e ... = Point Float...
è il costruttore di valore.
La mia domanda è: È comune utilizzare lo stesso nome per il tipo di dati e il costruttore di valori in Haskell?
Sì, lo è. Tuttavia, di solito usiamo 'newtype' invece di' data'. Ad esempio, 'State' viene in genere definito come segue:' newtype State s a = State {runState :: s -> (a, s)} '. –
@AaditMShah Questo funziona solo per i costruttori a campo singolo. A meno che non vogliate scartare una tupla ogni volta, non potete usare 'newtype' per il' Punto' menzionato. – Zeta
Una volta mi è stato indicato quando stavo spiegando Haskell a qualcuno che in alcune lingue (ad es. Java), il costruttore * sempre * ha lo stesso nome del tipo. Quindi, per qualcuno che viene in Haskell, potrebbe essere difficile avere diversi nomi di costruttori. – user2297560