Um tipo é como uma etiqueta para um valor ,eles são muito importantes porque ajudam na categorização dos nossos dados, dessa forma, permitem uma maior abstração na hora de criar nossas funções e nossas estruturas de dados. Ao invés de nos ate...
Tipo | |||||
Um tipo é como uma etiqueta para um valor, eles são muito importantes porque ajudam na categorização dos nossos dados, dessa forma, permitem uma maior abstração na hora de criar nossas funções e nossas estruturas de dados. Ao invés de nos atermos aos valores concretos conseguimos generalizar e dizer qual etiqueta conseguimos manipular. | |||||
| |||||
No exemplo, a função somar recebe dois valores do tipo inteiro e retorna um terceiro valor também do tipo inteiro. | |||||
Classe | |||||
Em haskell, uma classe de tipos é uma coleção de tipos que habilita um ou mais operadores ou uma ou mais funções. Fazendo uma analogia com a programação orientada a objetos um tipo se assemelha muito a uma interface e um operador/função pode ser entendido como um método abstrato. Um exemplo mais concreto: | |||||
| |||||
Estamos no terminal interativo da linguagem haskell, o ghci, e verificamos o tipo (:t) do operador de igualdade (==) e vemos (de forma resumida), que esse operador aceita como parâmetro um tipo a que obedece à restrição de tipos (Eq a) => da classe Eq. Dessa forma, se criarmos alguma estrutura própria e quisermos poder comparar duas instâncias dela por meio do operador de igualdade devemos implementá-lo. Vamos lá: | |||||
| |||||
No exemplo acima, definimos um tipo próprio chamado Coisa o qual aceita como parâmetro um tipo a e pode assumir os valores Nada, UmaCoisa a pense em algo como UmaCoisa Int, UmaCoisa Float, UmaCoisa Bool. Além disso, aceitamos guardar um par de valores do mesmo tipo, DuasCoisas Int Int por exemplo. Nota-se que, de forma resumida, o uso de deriving Show, acontece para que possamos printar os valores criados por Coisa no nosso terminal, em futuros posts vamos falar com mais detalhe sobre a cláusula deriving. A partir disso, podemos implementar o operador de igualdade: | |||||
| |||||
Dizemos que o tipo Coisa é uma instância da classe Eq, além disso, definimos como o operador de igualdade irá funcionar em cada caso: | |||||
| |||||
Métodos | |||||
Para entender o que são métodos podemos olhar a definição da Class Num: | |||||
| |||||
Temos que, para definir um tipo como sendo instância de num devemos implementar os métodos: | |||||
| |||||
Então, métodos nada mais são que as funções que devem ser definidas quando instanciamos uma classe. | |||||
Instância | |||||
Após ter lido tudo acima torna-se fácil entender uma instância, nada mais que a definição dos métodos de uma classe para um tipo, assim, Coisa é uma instância da classe Eq. | |||||
Fontes: | |||||