- Funkce která mají funkci jako parametr nebo výsledek.
- Funkcionály
(.) :: (a -> b) -> (c -> a) -> c -> b
- Každá funkce, které bere alespoň dva argumenty, lze chápat jako fci vyššího řádu
(*) :: Num a => a -> a -> a
(*) :: Num a => a -> (a -> a)
- Částečná aplikace = vyhodnotí funkci i pro neúplný výčet argumentů
- Specializací typové proměnné mohou -> přibýt
id :: a -> a
id x = x
id (+) :: a
id (+) :: Num a => a -> a -> a
Funkce flip
- Bere binární funkce a vrací binární funkci, akorát parametry volá opačně.
- modifikátor funkce
flip :: ( a -> b -> c ) -> b -> a -> c
flip f y x = f x y
- Point free = Funkce bez formálních parametrů
- Zabránit částečné aplikaci místo více argumentů = n-tice argumentů.
curry = rozdrobuje parametry, bere n-tici a vrátí jednotlivé parametry
uncurry = bere funkci a jednotlivé parametry a zalová funkci na n-tici
Operátorová sekce = speciální zápis binární funkce, která je částečně aplikována
(p+) = (+) p
(+q) = flip (+) q
Kombinátory
- bezparametrové funkce = není použito formálních parametrů
f x = (not.odd) x
f = (not.odd)
- Funkce která je definována v místě použití bez jména.
- Pochází z lambda kalkulu. Princip vytváření lambda funkcí, se říká lambda abstrakce
\ formální parametry -> tělo funkce
map (\ x -> x*x+1) [1,2,3,4,5]
Aplikační operátor $
- Aplikuje funkci na argument –> můžeme se vyhnout složitému závorkování.
f(g x) = ($) f (g x) = f $ (g x) = f $ g x