Programao Funcional Classes em Haskell Andr Santos Andr
- Slides: 21
Programação Funcional Classes em Haskell André Santos ©André Santos, 1998 -2002
Classes • Usadas para permitir overloading de nomes – operação de igualdade == • diferentes significados para diferentes tipos • Orientação a Objetos – herança ©André Santos, 1998 -2002
Funções polimórficas? (==) : : t -> Bool (<) : : t -> Bool show : : t -> String ©André Santos, 1998 -2002
Funções monomórficas • Definição funciona apenas para um tipo de dados específico capitalize : : Char -> Char capitalize ch = chr (ord ch + offset) where offset = ord ’A’ - ord ’a’ ©André Santos, 1998 -2002
Funções polimórficas • Uma única definição pode ser usada para diversos tipos de dados length : : [a] ->Int length [] = 0 length (x: xs) = 1 + length xs ©André Santos, 1998 -2002
Overloading • A função pode ser usada para vários (alguns) tipos de dados – diferentes definições para cada tipo • Classe: coleção de tipos para os quais uma função está definida • O conjunto de tipos para os quais (==) está definida é a classe igualdade, Eq ©André Santos, 1998 -2002
Definindo a classe igualdade • Identifica-se o que é necessário para um tipo t ser da classe – nesse caso, ele deve possuir uma função (==) definida sobre t, do tipo t -> Bool class Eq t where (==) : : t -> Bool ©André Santos, 1998 -2002
Instâncias • Tipos membros de uma classe são chamadas instâncias • São instâncias de Eq os tipos primitivos e as listas e tuplas de instâncias de Eq – Int, Float, Char, Bool, [Int], (Int, Bool), [[Char]], [(Int, [Bool])] • Int -> Int não é instância da classe Eq • Instância de classe vs. Instância de um tipo ©André Santos, 1998 -2002
Funções que usam igualdade all. Equal : : Eq Intt-> ->t. Int ->-> Bool =>Int t -> -> t Bool? all. Equal n m p = (n == m) && (m == p) • Contexto – definido pela parte antes do operador “=>” all. Equal succ ? member : : Eq t =>-> [t] -> t Bool? [Char] Char ->-> Bool member [] b = False member (a: as) b = (a==b) || member as b ©André Santos, 1998 -2002
Outras funções books : : Eq a => [(a, b)] -> a -> [b] borrowed : : Eq u => [(t, u)] -> u -> Bool num. Borrowed : : Eq t => [(t, u)] -> t -> Int ©André Santos, 1998 -2002
Definido assinaturas de classes • Funções (nome e tipo) que devem ser definidas para cada instância da classe • Exemplo de uma assinatura de class Visible t where to. String : : t -> String size : : t -> Int ©André Santos, 1998 -2002
Definindo instâncias de uma classe • Definir as funções da assinatura para um tipo • Exemplo de uma instância da classe Eq instance Eq Bool True == True False == False _ == _ where = True = False ©André Santos, 1998 -2002
Exemplo de instâncias da classe Visible instance Visible Char where to. String ch = [ch] size _ = 1 instance Visible Bool where to. String True = ”True” to. String False = ”False” size _ = 1 ©André Santos, 1998 -2002
Exemplo de instâncias da classe Visible instance Visible t => Visible [t] where to. String = map to. String >. > concat size = map size >. > foldr (+) 0 ©André Santos, 1998 -2002
Definições default class Eq t where (==), (/=) : : t -> Bool a /= b = not (a==b) podem ser substituídas (overloaded) ©André Santos, 1998 -2002
Classes derivadas class Eq t => Ord t where (<), (<=), (>=) : : t -> Bool max, min : : t -> t a <= b = (a < b || a == b) a > b = b < a a < b = b > a a >= b = (a > b || a == b) i. Sort : : Ord t => [t] ->[t] Herança de operações ©André Santos, 1998 -2002
Restrições múltiplas v. Sort = i. Sort >. > to. String v. Sort : : (Ord t, Visible t) => [t] -> String instance (Eq t, Eq u) => Eq (t, u) where (a, b) == (c, d) = (a == c && b == d) class (Ord t, Visible t) => Ord. Vis t Herança múltipla ©André Santos, 1998 -2002
Classes predefinidas Eq, Ord class (Ord t) => Enum t where enum. From : : t -> [t] enum. From. Then : : t -> [t] enum. From. To : : t -> [t] enum. From. Then. To : : t -> [t] [n. . ] [n, m. . ] [n. . m] [n, n’. . m] ©André Santos, 1998 -2002
Classes predefinidas show : : (Show t) => t -> String read : : (Read t) => String -> t ©André Santos, 1998 -2002
Tipos Numéricos Int, Integer Float, Double Rational Complex Classes Num, Fractional rep 0 ch = [] rep n ch = ch : rep (n-1) ch : type rep : : Num a => a -> b -> [b] ©André Santos, 1998 -2002
Tipos vs. Classes • Linguagens OO: tipos == classes – to. String : : Visible. Type -> String • Ligação dinâmica – [True, ’N’, False] : : [Visible. Type] • Nomenclatura: Overloading vs. Polimorfismo – polimorfismo ad-hoc ©André Santos, 1998 -2002
- Requisito funcional e não funcional
- Requisitos não funcionais exemplos
- Requisitos funcionais
- De andr
- Mexelitine
- Andr breton
- Solvay roha
- Dr andr
- Processos mentais psicologia
- Atitudes sociais exemplos
- Chapter 15 medical terminology
- Quanto classe e subclasse
- Pre ap classes vs regular classes
- Haskell wiki book
- Haskell input output
- Haskell odds
- Samuel haskell
- Higher-order functions haskell
- Functor laws haskell
- Haskell printf
- Haskell higher order functions
- Absolute value haskell