Resumo Haskell
Resumo Haskell
Polimorfismo Paramétrico
Como funciona:
identidade :: a -> a
identidade x = x
-- Uso:
identidade 5 -- Retorna: 5
identidade "Haskell" -- Retorna: "Haskell"
Classes de Tipos
Definição: São como interfaces que definem um conjunto de operações que podem ser
implementadas por diferentes tipos.
Mecanismo:
o Exemplo: Eq é uma classe que define a operação (==) para verificar igualdade.
Exemplo 3 - Definindo igualdade para um tipo personalizado:
Um tipo pode ser polimórfico, mas restringido a uma classe específica. Por exemplo:
o Uma função pode aceitar qualquer tipo, contanto que ele seja parte da classe
Eq.
Monoides
2. Um elemento neutro.
Exemplo:
identidade x = x -- Funciona com números, textos, o que você
quiser!
Categorias
Regras:
1. Todo objeto tem um morfismo identidade que o mapeia para ele mesmo.
Identidade
Exemplo 1:
id :: a -> a
id x = x
-- Uso:
id 42 -- Retorna: 42
id "Oi" -- Retorna: "Oi"
Composição
Exemplo 2:
dobro :: Int -> Int
dobro x = 2 * x
triplo :: Int -> Int
triplo x = 3 * x
sextuplo :: Int -> Int
sextuplo = dobro . triplo
-- Uso:
sextuplo 2 -- Retorna: 12
Aplicação em Haskell
Propriedades:
o Identidade: id é a função que retorna o mesmo valor.
A Teoria das Categorias é a base para abstrações como funtores e mônadas, que
ajudam a estruturar e organizar código de maneira lógica e segura.
Resumo Geral:
Capítulo 6: Explica a Teoria das Categorias como base para as abstrações do Haskell,
com foco em identidade e composição.
Exemplo:
id x = x -- "Você é você mesmo."
Capítulo 7 - Funtores
Definição
Um funtor é uma estrutura que pode ser mapeada. Ele permite aplicar funções a
valores encapsulados em um contexto (como listas ou tipos opcionais) sem retirar o
valor do contexto.
Como funciona?
Em Haskell, funtores são representados pela classe Functor, que define a operação
fmap:
Propriedades
Funtores Aplicativos
Uma extensão dos funtores, onde funções também podem estar em um contexto. Eles
permitem aplicar funções encapsuladas a valores encapsulados.
Exemplo 4:
Funtores Contravariantes
Exemplo prático: Functor Contravariante para Predicate Um Predicate a é uma função que
retorna um Bool para algum valor do tipo a.
import Data.Functor.Contravariant
newtype Predicate a = Predicate (a -> Bool)
instance Contravariant Predicate where
contramap f (Predicate p) = Predicate (p . f)
-- Uso: Criando um predicado para verificar se um número é par
isEven :: Predicate Int
isEven = Predicate even
-- Ajustando o predicado para trabalhar com o comprimento de strings
lengthIsEven :: Predicate String
lengthIsEven = contramap length isEven
-- Testando
runPredicate :: Predicate a -> a -> Bool
runPredicate (Predicate p) x = p x
runPredicate lengthIsEven "Haskell" -- Retorna: True (comprimento de
"Haskell" é 7, que não é par)
runPredicate lengthIsEven "Fun" -- Retorna: False (comprimento de
"Fun" é 3, que é ímpar)
Explicação:
2. contramap ajusta o predicado para usar o comprimento de uma string como entrada
ao invés de números diretamente.
Exemplo: