GADT, moduly, ADT, typy ranku-n ... Flashcards

1
Q

čo to sú fantómové typy?

A

znemožnia vytvorenie sémanticky nekorektných výrazov
slide 4

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Aký je problém pri fantómových typoch?

A

Nevieme definovať múdru verziu Lt, ani eval, (slide 5)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Co to su GADTs?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Ako spravit eval cez GADTs?

A

slide 8

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Co je to modul?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Ake su vyhody rozdelenia programu do modulov?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Aka je syntax modulov?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Co exportujeme akym nazvoslovim?

A

module Meno ({-exportované názvy-}) where
module Meno where exportuje všetky názvy

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

pokial subor nezacina module tak sa predpoklada

A

module Main(main) where

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Opis exporty a importy na slide 11, 12

A

slide 11,12

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Naco nam je import qualified?

A

zabraňuje kolízii názvov (name clash)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Co je to abstraktny datovy typ?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Opis ADT zasobnika

A

slide 14

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Co znamena ze normalne typy su v haskell ranku-1?

A

a → b → a je ekvival.:
forall a. (a -> forall b. (b -> a))
forall a b. a -> b -> a

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Aky je problem s f::a->(a,Int), fx=(x,1)?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Ako s typmi ranku 2? Aky typ chceme?

A

slide 17

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

co je zakladom pre typy vyssieho ranku?

A

System F (alebo druho-rádový λ-kalkulus)

18
Q

Co je to typ ranku n?

A

typ ranku-n je funkcia, ktorá má aspoň jeden argument ranku-(n-1), ale žiadny argument vyššieho ranku

19
Q

Ako v HS zapisat funkciu ranku n?

A

slide 18

20
Q

opis co sa deje na slide 19

A

slide 19

21
Q

Co je to bezbodovy styl?

A

Bezbodový štýl, je štýl zápisu funkcie, pri ktorom sa v tele funkcie nespomínajú argumenty (body) v ktorých sa funkcia vyhodnocuje.

22
Q

Daj priklady na pointfree upravy

A

slide 20

23
Q

co sa deje na slide 23?

A

pointfree prepis
slide 23 pozri

24
Q

Kedy je vyraz v WHNF? (Weak head normal form)

A

výraz je vo WHNF, ak jeho najvonkajšejšia časť je:
* konštruktor (True, Just (1+2), (:) (1+2) rest)
* lambda abstrakcia (\x -> výraz)
* neúplná aplikácia vstavanej funkcie ((+) 2, sqrt)

25
Q

Pozri si priklady na vyrazy v WHNF a nie v nej

A

slide 24

26
Q

Kedy je vyraz v NF? (Normal form)

A

výraz je v normálnej forme (NF), keď je plne vyhodnotený (žiadny podvýraz už nemôže byť ďalej vyhodnotený)

27
Q

Daj priklady vyrazov v NF a nie v nej

A

slide 25

28
Q

Aky je vztah NF a WHNF?

A

výraz je NF ⇒ výraz je vo WHNF

29
Q

Co robi seq?

A

najzákladnejší spôsob ako zaviesť striktnosť do Haskellu
funkcia seq :: a -> b -> b
* berie dva argumenty ľubovoľného typu
* vracia hodnotu druhého argumentu
* ako vedľajší efekt vyhodnotí prvý argument do WHNF

30
Q

Preco foldl’ nemusi vzdy fungovat?

A

slide 27

31
Q

Co to je bang pattern?

A
  • f1 !x = True – vyhodnotí x do WHNF
  • f2 (!x, y) = [x,y] – vyhodnotí x, ale nie y
  • f3 !(x,y) = [x,y] = f4 (x,y) = [x,y]
  • let !z = x–vyhodnotíxdoWHNF
32
Q

na co je deepseq?

A

poskytuje funkcie pre úplné vyhodnotenie dátových
štruktúr (NF)

33
Q

Daj priklad na deepseq

A

slide 29

34
Q

Co to su immutable datove struktury?

A

po vytvorení už nemôžu byť modifikované
môžeme vytvoriť novú štruktúru vychádzajúcu zo starej,
ale starú nemôžeme modifikovať (update in-place)

35
Q

Ake su vyhody immutable struktur?

A

ľahšie sa o nich uvažuje - majú iba jeden stav a v tom ostávajú
viac-vláknová bezpečnosť (thread safety), je read-only
ľahko sa dajú zdieľať
zabraňujú vedľajším efektom
stará a nová verzia zdieľajú spoločné časti
ľahko sa zisťuje ktorá časť bola v novej verzii modifikovaná (oproti starej verzii)

36
Q

daj priklady na immutable v Java, C#, …

A

slide 31

37
Q

Mame aj v haskelli mutable struktury?

A

Ano
import Data.STRef (newSTRef, modifySTRef’, readSTRef)

38
Q

Co je to lexikalny scoping?

A

funkcia môže používať iba lexikálne viditeľné premenné v čase definície

bez closures – ak by tieto premenné mohli medzi definíciou a volaním zaniknúť, je to chyba
s closures – použité premenné ∃ v čase definície existujú v uzávere funkcie aj ak by medzitým mali zaniknúť

39
Q

Co je to dynamicky scoping?

A

(nepoužíva closures) – premenné sa vždy berú z aktuálneho prostredia (môže obsahovať premenné, ktoré nie sú lexikálne dostupné v čase definície)

40
Q

Ake jazyky pouzivaju closures?

A

Napr javascript

41
Q

Kde mame typovu inferenciu?

A

C++ auto
C# var
Java Arrays.asList