4. Princípio de Uniformidade de Tipos Uma linguagem (na medida do possível) não deve restringir as operações que podem ser realizadas sobre valores de um tipo; Se em uma linguagem certos tipos não possuem toda a flexibilidade oferecida a outros tipos, dizem que estes tipos são tipos de “Segunda Ordem”.
5. Funções de Alta Ordem Linguagens funcionais possuem o conceito de funções de alta ordem pois as funções são tipos que podem ser manipulados como quaisquer outros tipos da linguagem: Funções podem ser passadas como argumentos de outras funções; Funções podem ser retornadas como resultados de outras funções; Funções podem ser construídas dinamicamente.
6. Tipo Função Notação: a −> b: Função que recebe argumentos do tipo a e retorna valores do tipo b. Valores: Expressões lambda: −> x + 1 −> −> x + y Aplicação de função: f 1 g x y
7. Funções como argumento/resultado de funções t e s t e : : ( Int −> Int ) −> Int t e s t e f = f 2 func : : Int −> ( Int −> Int ) func n = −> x + n twi c e : : ( Int −> Int ) −> ( Int −> Int ) twi c e f = −> f ( f x )
8. Funções Importantes map : : ( a −> b ) −> [ a ] −> [ b ] f i l t e r : : ( a −> Bool ) −> [ a ] −> [ a ] takeWhile : : ( a −> Bool ) −> [ a ] −> [ a ] dropWhile : : ( a −> Bool ) −> [ a ] −> [ a ] f o l d l : : ( a −> b −> a ) −> a −> [ b ] −> a f o l d r : : ( a −> b −> b ) −> b −> [ a ] −> b