Ricerca…


Creazione di un tipo di dati semplice

Il modo più semplice per creare un tipo di dati personalizzato in Haskell è utilizzare la parola chiave data :

data Foo = Bar | Biz

Il nome del tipo è specificato tra i data e = , ed è chiamato un costruttore di tipi . After = specifichiamo tutti i costruttori di valore del nostro tipo di dati, delimitati da | cartello. C'è una regola in Haskell che tutti i costruttori di tipo e valore devono iniziare con una lettera maiuscola. La dichiarazione di cui sopra può essere letta come segue:

Definisci un tipo chiamato Foo , che ha due possibili valori: Bar e Biz .

Creare variabili del nostro tipo personalizzato

let x = Bar

L'istruzione precedente crea una variabile denominata x di tipo Foo . Verifichiamo controllando il suo tipo.

:t x

stampe

x :: Foo

Creazione di un tipo di dati con parametri di costruzione del valore

I costruttori di valori sono funzioni che restituiscono un valore di un tipo di dati. Per questo motivo, come qualsiasi altra funzione, possono assumere uno o più parametri:

data Foo = Bar String Int | Biz String

Controlliamo il tipo di costruttore del valore Bar .

:t Bar

stampe

Bar :: String -> Int -> Foo

che dimostra che Bar è davvero una funzione.

Creare variabili del nostro tipo personalizzato

let x = Bar "Hello" 10
let y = Biz "Goodbye"

Creazione di un tipo di dati con parametri di tipo

I costruttori di tipi possono assumere uno o più parametri di tipo:

data Foo a b = Bar a b | Biz a b

Digitare i parametri in Haskell deve iniziare con una lettera minuscola. Il nostro tipo di dati personalizzati non è ancora un tipo reale. Per creare valori del nostro tipo, dobbiamo sostituire tutti i parametri di tipo con tipi reali. Poiché a e b possono essere di qualsiasi tipo, i nostri costruttori di valori sono funzioni polimorfiche.

Creare variabili del nostro tipo personalizzato

let x = Bar "Hello" 10      -- x :: Foo [Char] Integer
let y = Biz "Goodbye" 6.0   -- y :: Fractional b => Foo [Char] b
let z = Biz True False      -- z :: Foo Bool Bool

Tipo di dati personalizzato con parametri di registrazione

Supponiamo di voler creare un tipo di dati Persona, che ha un nome e un cognome, un'età, un numero di telefono, una strada, un codice postale e una città.

Potremmo scrivere

data Person = Person String String Int Int String String String

Se vogliamo ora ottenere il numero di telefono, dobbiamo fare una funzione

getPhone :: Person -> Int
getPhone (Person _ _ _ phone _ _ _) = phone

Bene, non è divertente. Possiamo fare meglio usando i parametri:

data Person' = Person' { firstName     :: String
                       , lastName      :: String
                       , age           :: Int
                       , phone         :: Int
                       , street        :: String
                       , code          :: String
                       , town          :: String }

Ora abbiamo il phone funzione dove

:t phone
phone :: Person' -> Int

Ora possiamo fare tutto ciò che vogliamo, ad esempio:

printPhone :: Person' -> IO ()
printPhone = putStrLn . show . phone

Possiamo anche associare il numero di telefono con Pattern Matching :

getPhone' :: Person' -> Int
getPhone' (Person {phone = p}) = p

Per un facile utilizzo dei parametri vedi RecordWildCards



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow