9. gyakorlat
Típus szinonímák
A típusokra definiálhatunk szinonímákat.
Példa:
-- person1
person1 :: (String, String, String, Int)
person1 = ("F.Kány", "ELTE déli tömb","fkany@inf.elte.hu",1 )
-- person2
type Name = String
type Address = String
type Email = String
type Age = Int
person2 :: (Name, Address, Email, Age)
person2 = person1
-- A person1 és a person2 ugyanaz lesz
Másik példa:
Saját típusok
Haskellben egy típus neve mindenképpen nagybetűvel kell, hogy kezdődjön
Bool típus
"Így" van definiálva a Bool
Answer típus
- Az
Answeregy saját típus - Definiáljuk a 3 lehetséges értékét => ezek konstruktorok (ld. a végén)
Definiálunk egy függvényt az Answer típussal
Nem tudja megjeleníteni, mert szükség van a Show típusosztályra => deriving
deriving
- Automatikusan implementálja a típusosztályt
- Megjegyzés: A
deriving7 típusosztályt tud:- Show
- Read
- Eq
- Ord
- Enum
- Bounded
-- Derive -> automatikusan implementálja a típusosztályt
λ data Answer = No | Perhaps | Yes deriving Show
λ neg Yes
No
instance
Manuálisan implementálva => instance
Show típusosztály
-- instance -> manuálisan implementálható a típusosztály
instance Show Answer where
-- show :: a -> String
show No = "No"
show Perhaps = "Perhaps"
-- show Perhaps = "Perchance" -- ha így írnánk, akkor `Perchance`-ként használnánk (így fordulna le String-re, ami megjelenik)
show Yes = "Yes"
Eq típusosztály
instance Eq Answer where
(==) Yes Yes = True
(==) No No = True
(==) Perhaps Perhaps = True
(==) _ _ = False
Cliffhanger (Kövi órán innen folytatjuk)
Konstruktorok
- A
Complex-nél aCegy konstruktor - Az
Answer-nél aYes, aPerhapsés aNois konstruktorok - Létrehozza az adott típusnak egy elemét / értékét
- Konstruktorokra lehet mintailleszteni
- Definiálásnál
|jelekkel választjuk el őket