Programao Funcional Prof Carlos Alberto Haskell Classes Prof
Programação Funcional Prof. Carlos Alberto
Haskell: Classes Prof. Carlos Alberto
Polimorfismo �Polimorfismo em Haskell procura generalizar o tipo de uma função; �Expressões de tipos polimórficos descrevem famílias de tipos; �Ao usar polimorfismo, as definições das funções tornam-se genéricas.
Polimorfismo �Exemplo 01
Polimorfismo �Com tipos polimórficos, alguns tipos estão em uma hierarquia. �Ex. : o tipo [a] é mais geral que [char] �Funções polimórficas aceitam mais de um tipo de dado como argumento. �Ex. : a função head �Funções monomórficas aceitam somente um tipo de argumento. �Ex. : soma. Lista : : [Int] -> [Int]
Polimorfismo �Polimorfismo ad hoc �Algumas funções aceitam alguns tipos de argumentos e rejeitam outros. Elas possuem polimorfismo restrito. �Ex. : função de adição (+) pode ser aplicada a valores Int, Float, mas não ao tipo Char. �Para tratar esse tipo de polimorfismo, haskell agrupa os tipos em classes.
Polimorfismo �Uma classe define as funções que podem ser aplicadas ao tipo (métodos da classe). �Ex. : A classe Eq (Equality Class) é o conjunto de tipos em que os operadores “==” e “/=” são definidos:
Polimorfismo �Os operadores relacionais “==” e “/=” podem comparar uma família de tipos que estão sob uma classe mais geral : tipo “a”
Polimorfismo �Criando uma instância �Não pode usar o método “==”, pois a expressão não pertence à classe Eq.
Polimorfismo �Criando uma instância �Solução simples: criar comparação. uma função para fazer a
Polimorfismo �Criando uma instância �A partir da função “iguala” é possível instanciar o tipo Nome. Completo na classe Eq.
Polimorfismo �Criando uma instância �Outra maneira é derivando uma classe
Classes Derivadas �Haskell suporta o conceito de extensão de classe ou derivação de classe (deriving class). �Além de ter suas próprias funções, é possível uma classe herdar funções de uma classe superior. �Um exemplo de classe derivada é a Ord, que herda todos os métodos da classe Eq.
Classes Derivadas �No exemplo a seguir, a classe Eq é uma superclasse de Ord; �Qualquer tipo que seja instância de Ord deve também ser uma instância de Eq.
Hierarquia de Classes
Classes �Criando uma classe �Instanciando uma classe
Classes �Outras instancias da classe
Classes �Outras instancias da classe
Herança Múltipla �Haskell permite o conceito de herança múltipla
Haskell: Classes Prof. Carlos Alberto
- Slides: 20