GADT, moduly, ADT, typy ranku-n ... Flashcards
čo to sú fantómové typy?
znemožnia vytvorenie sémanticky nekorektných výrazov
slide 4
Aký je problém pri fantómových typoch?
Nevieme definovať múdru verziu Lt, ani eval, (slide 5)
Co to su GADTs?
Generalized algebraic datatypes
umožňujú obmedziť návratovú hodnotu dátového konštruktora
pri ADT by musel byť Expr a
pri GADT môže byť napr. Expr Int alebo Expr Bool
slide 6
Ako spravit eval cez GADTs?
slide 8
Co je to modul?
modul je zoskupenie vzájomne súvisiacich funkcií, typov, typových tried, konštánt, . . .
program je zoskupenie modulov
moduly importujú iné moduly a volajú ich funkcie
program sa spúšťa zavolaním hlavnej (main) funkcie z Main modulu
Ake su vyhody rozdelenia programu do modulov?
kontrola menného priestoru (menej kolízií mien)
slabo previazané moduly (loosely coupled) - väčšia znovupoužiteľnosť, ľahšie rozdelenie práce, rýchlejší vývoj
ukrytie implementačných detailov
umožňuje vytváranie abstraktných dátových typov
Aka je syntax modulov?
názvy modulov sú alfanumerické, začínajú veľkým písmenom
modul s názvom Meno je v súbore s názvom Meno.hs
pokiaľ je názvom modulu zložených z viac názvov oddelených
bodkou, tak názvy pred bodkou sú adresáre
Co exportujeme akym nazvoslovim?
module Meno ({-exportované názvy-}) where
module Meno where exportuje všetky názvy
pokial subor nezacina module tak sa predpoklada
module Main(main) where
Opis exporty a importy na slide 11, 12
slide 11,12
Naco nam je import qualified?
zabraňuje kolízii názvov (name clash)
Co je to abstraktny datovy typ?
dátový typ spolu s operáciami nad týmto typom, pričom sa ukrývaju implementačné detaily (vrátane štruktúry typu)
dostupné operácie nazývame rozhranie (interface) ADT
napr. Data.Map a Data.Set
Opis ADT zasobnika
slide 14
Co znamena ze normalne typy su v haskell ranku-1?
a → b → a je ekvival.:
forall a. (a -> forall b. (b -> a))
forall a b. a -> b -> a
Aky je problem s f::a->(a,Int), fx=(x,1)?
Očakávali by sme, že funkcia g f x y = (f x, f y) po zavolaní g2 f True ’a’ vráti ((True,1),(’a’,1)). V skutočnosti však funkcii g Haskell odvodil typ:
g::(a->b)->a->a->(b,b)
Potrebujeme typ ranku-2
Ako s typmi ranku 2? Aky typ chceme?
slide 17