Definice vlastních typů

data Nazev_typu = Hodnotove_konstruktory

Hodnotový konstruktor jako n-ární funkce

Typové konstruktory

Tvorba typu

(->) Dny Bool = Dny -> Bool
[] Dny = [Dny]

Definice polymorfních typových konstruktorů

Typový konstruktor Maybe

data Maybe a = Nothing | Just a

Typové aliasy

type String = [Char]

type Day = Int
type Month = Int
type Year = Int
type Date = (Day, Month, Year)

Rekurze

Rekurzivní datové struktury

Binární strom

Rekurzivní definice binárního stromu

Definice datového typu

data BinTree a = Empty | Node a (BinTree a) (BinTree a)

-- Příklad hodnoty defiovaného typu
tc :: BinTree Char
tc = Node 'e'
	(Node 'i' Empty (Node 'c' Empty Empty))
	(Node 'j' (Node 'd' Empty Empty)
		(Node 'r' Empy Empty))

-- Práce s rekurzivními datovými strukturami
-- Pomocí rekurze
treeP1 :: Num a => BinTree a -> BinTree a
treeP1 Empty = Empty
treeP1 (Node x left right)
	= Node (x+1) (treeP1 left) (treeP1 right)

Dokazování správnosti programů

Důkaz korektnosti algoritmu