O documento discute como a programação funcional pode ser uma ferramenta poderosa para lidar com a complexidade de programas. Apresenta abstrações funcionais como monóides e mônadas que permitem dividir programas em partes menores e compô-los de forma previsível, levando à corretude por construção. Também discute como essas abstrações matemáticas promovem maior abstração no desenvolvimento de software.
InterCon 2017 - Programação funcional no desenvolvimento de aplicações: pensa...iMasters
O documento discute como a programação funcional pode ser uma ferramenta útil para controlar a complexidade de programas. Apresenta abstrações funcionais como monóides e mônadas que permitem expressar programas de forma mais concisa e abstrata, facilitando a composição e raciocínio sobre corretude.
Este documento apresenta uma introdução aos principais tipos de dados em Python, incluindo números, strings, listas, tuplas, conjuntos, dicionários e funções como map, filter e reduce. Demonstra como manipular esses tipos de dados com exemplos de inicialização, iteração, ordenação, filtragem e redução.
Este documento pede para (1) resolver funções com precisão de 0,01 nas intervalos dados e (2) determinar a raiz de uma função logarítmica com precisão de 0,01.
Este documento apresenta uma introdução às listas em Haskell, cobrindo tópicos como:
1) Fundamentos sobre listas e sua representação em Haskell usando cabeça e corpo;
2) Operador (:) para construção de listas;
3) Listas por compreensão e funções sobre listas como length, head, tail entre outras.
O documento descreve o comando SELECT na linguagem SQL para interrogação de bases de dados. Explica que o SELECT permite selecionar registos e colunas de uma tabela usando diferentes cláusulas e operadores. Descreve operações como selecionar todos os registos, usar restrições WHERE, projetar colunas, e usar operadores lógicos e de comparação.
1. O documento descreve as funções afins, que são funções da forma f(x)=ax+b, onde a e b são números reais.
2. Exemplos de funções afins incluem funções lineares, constantes, identidade e translação.
3. O valor de uma função afim em um ponto x é calculado como f(x)=ax+b e exemplos são fornecidos.
O documento discute o comando SELECT no MySQL, incluindo ordenação de resultados por coluna única ou múltiplas colunas, ordenação por expressões, tratamento de valores nulos e remoção de repetições usando a cláusula DISTINCT. Ele fornece exemplos usando duas tabelas, Produto e t1.
Este documento apresenta uma introdução à linguagem de programação Python. Cobre tópicos como downloads, material de apoio, tipos de dados como strings, listas, dicionários, funções, arquivos e mais. Apresenta exemplos de código para ilustrar o uso dessas estruturas e conceitos.
InterCon 2017 - Programação funcional no desenvolvimento de aplicações: pensa...iMasters
O documento discute como a programação funcional pode ser uma ferramenta útil para controlar a complexidade de programas. Apresenta abstrações funcionais como monóides e mônadas que permitem expressar programas de forma mais concisa e abstrata, facilitando a composição e raciocínio sobre corretude.
Este documento apresenta uma introdução aos principais tipos de dados em Python, incluindo números, strings, listas, tuplas, conjuntos, dicionários e funções como map, filter e reduce. Demonstra como manipular esses tipos de dados com exemplos de inicialização, iteração, ordenação, filtragem e redução.
Este documento pede para (1) resolver funções com precisão de 0,01 nas intervalos dados e (2) determinar a raiz de uma função logarítmica com precisão de 0,01.
Este documento apresenta uma introdução às listas em Haskell, cobrindo tópicos como:
1) Fundamentos sobre listas e sua representação em Haskell usando cabeça e corpo;
2) Operador (:) para construção de listas;
3) Listas por compreensão e funções sobre listas como length, head, tail entre outras.
O documento descreve o comando SELECT na linguagem SQL para interrogação de bases de dados. Explica que o SELECT permite selecionar registos e colunas de uma tabela usando diferentes cláusulas e operadores. Descreve operações como selecionar todos os registos, usar restrições WHERE, projetar colunas, e usar operadores lógicos e de comparação.
1. O documento descreve as funções afins, que são funções da forma f(x)=ax+b, onde a e b são números reais.
2. Exemplos de funções afins incluem funções lineares, constantes, identidade e translação.
3. O valor de uma função afim em um ponto x é calculado como f(x)=ax+b e exemplos são fornecidos.
O documento discute o comando SELECT no MySQL, incluindo ordenação de resultados por coluna única ou múltiplas colunas, ordenação por expressões, tratamento de valores nulos e remoção de repetições usando a cláusula DISTINCT. Ele fornece exemplos usando duas tabelas, Produto e t1.
Este documento apresenta uma introdução à linguagem de programação Python. Cobre tópicos como downloads, material de apoio, tipos de dados como strings, listas, dicionários, funções, arquivos e mais. Apresenta exemplos de código para ilustrar o uso dessas estruturas e conceitos.
1) O documento apresenta exemplos e conceitos sobre funções, incluindo cálculo de funções, domínio, funções pares e ímpares, funções compostas e inversas.
2) São mostrados exemplos de cálculo de funções, determinação do domínio, identificação de funções pares e ímpares.
3) Também são explicados os conceitos de função composta e como calcular funções compostas, assim como o processo para encontrar a função inversa.
Este documento resume os principais conceitos de bancos de dados relacionais utilizando PostgreSQL. Inclui exemplos de criação de tabelas, tipos de busca como sequencial scan e index scan, diferentes tipos de junções como nested loop, merge join e hash join, e agregações com grupo.
Este documento apresenta uma série de exercícios de cálculo que envolvem derivar funções, encontrar equações de retas tangentes e aplicar a regra da cadeia. Os alunos devem calcular derivadas, derivar funções usando regras, encontrar equações de retas tangentes dadas funções e seus pontos e aplicar a regra da cadeia para encontrar derivadas compostas.
O documento descreve diferentes tipos de funções polinomiais e suas propriedades, incluindo grau de uma função, função identidade, função constante, função modular, função composta, função sobrejetora, função injetora e função bijetora. Exemplos ilustram cada tipo de função.
1. O documento apresenta análises exploratórias de dados e modelos de classificação para prever se uma organização é tradicional ou exponencial com base em suas características. 2. É treinado um modelo de floresta aleatória que identifica "Demandas Pendentes" como a característica mais importante. 3. Também é construída uma árvore de decisão para classificação e são comparadas suas previsões com as do modelo de floresta aleatória.
O documento contém 4 problemas sobre funções. O primeiro pede para identificar a função f dado fog. O segundo calcula a composição de funções gof. O terceiro pede a função inversa de f(x)=2x+5. O quarto calcula o valor da inversa f-1 para um dado valor.
1) O documento discute funções compostas e funções inversas, apresentando suas definições e exemplos de exercícios resolvidos.
2) A seção de funções compostas explica o que é uma função composta e apresenta um exercício resolvido.
3) A seção de função inversa define o que é uma função inversa e fornece a regra prática para obter a função inversa de uma função bijetora.
O documento discute funções quadráticas, incluindo como determinar seus zeros (ou raízes) igualando a função f(x) a zero e usando a fórmula de Bhaskara. Também mostra como escrever funções quadráticas na forma fatorada e determinar as raízes de algumas funções específicas.
O documento apresenta uma lista de exercícios sobre funções matemáticas. Os exercícios incluem identificar relações que são funções, classificar funções como injetora, sobrejetora ou bijetora, compor funções e resolver funções recursivas.
O documento descreve recursos avançados da linguagem SQL e do banco de dados PostgreSQL. Ele apresenta conceitos como Common Table Expression (CTEs), Window Functions e Full Text Search no PostgreSQL, além de detalhar a organização do padrão SQL e recursos de manipulação de dados externos. O objetivo é mostrar como otimizar consultas e acesso a dados usando recursos do padrão SQL e extensões do PostgreSQL.
1) O documento apresenta uma lista de exercícios sobre funções reais de uma variável real para a disciplina de Cálculo I. A lista contém 15 questões sobre domínios, gráficos, composição, inversa e identidades trigonométricas e hiperbólicas de funções.
2) As questões 1 a 3 pedem para determinar domínios e imagens de funções dadas, esboçar gráficos e encontrar o domínio de uma função específica.
3) As questões 4 a 11 abordam propriedades como paridade, compos
As características básicas de uma função são o domínio, contradomínio e imagem. O domínio representa os valores possíveis das abscissas, o contradomínio é o conjunto de todos os valores possíveis das ordenadas, e a imagem é o conjunto dos valores das ordenadas resultantes da aplicação da função.
1) O documento discute as propriedades da multiplicação, incluindo comutatividade, associatividade e distributividade.
2) Ele fornece exemplos de como aplicar essas propriedades para simplificar cálculos multiplicativos.
3) Exercícios são fornecidos para que o aluno pratique aplicando as propriedades da multiplicação.
1. O documento contém 32 questões sobre funções compostas e relações entre funções.
2. As questões envolvem determinar expressões algébricas, valores numéricos, domínios e conjuntos solução a partir de informações fornecidas sobre definições, gráficos e valores de funções.
3. Os tipos de funções envolvidas incluem polinômios, radiciais, exponenciais e funções definidas por partes.
Uma função composta é construída a partir de duas ou mais funções. Ela associa cada elemento do domínio da primeira função ao elemento da imagem da última função, passando pelos domínios e imagens intermediários. A função composta de f e g, denotada por gof, é definida como gof(x)=g(f(x)), mapeando cada x no resultado de aplicar primeiro f e depois g.
1. O documento apresenta 28 questões sobre funções polinomiais e trigonométricas. As questões abordam conceitos como cálculo de raízes, vértice, domínio, conjunto imagem, gráficos e resolução de equações e inequações funcionais.
Este documento é uma apostila sobre cálculo I que introduz o conceito de derivada de uma função real. A derivada representa a inclinação de uma curva em um ponto e pode ser usada para encontrar a equação da reta tangente. A apostila fornece exemplos e exercícios sobre como calcular derivadas e usar suas propriedades.
O documento demonstra que uma função f definida no intervalo 0 < x < s é uma função bijetora nesse intervalo para os reais. A função é injetiva porque valores distintos de x resultam em valores distintos de f(x). É sobrejetora porque para qualquer valor real y, existe um valor de x tal que f(x) = y, encontrado através de uma equação quadrática.
O documento discute vários tipos de joins entre tabelas em SQL, incluindo produto cartesiano, inner join, left join, right join e full join. Também cobre alias de tabelas e operadores de união como UNION, INTERSECT e MINUS para combinar resultados de consultas SQL.
O documento apresenta uma introdução às mônades em Haskell, discutindo sua definição abstrata, aplicações práticas e como elas permitem lidar com efeitos colaterais de forma pura através do uso de monóides na categoria de endofunctors.
A apresentação introduz a linguagem Go, destacando suas características como tipagem dinâmica em um sistema de tipos estáticos, ausência de herança mas presença de métodos, e dois compiladores principais. Exemplos demonstram sintaxes como declaração de variáveis, estruturas de controle, funções, maps, channels e paralelismo.
1) O documento apresenta um programa de treinamento em programação funcional em Haskell, abordando tópicos como módulos, funções de ordem superior, e o desafio de implementar a cifra de César em Haskell.
2) São apresentadas funções como map, filter, foldr que mapeiam, filtram e dobram listas, respectivamente. Também são explicadas funções de composição e predicados com all e any.
3) Como desafio, o aluno deve implementar em Haskell a cifra de César, um método simples de criptograf
1) O documento apresenta exemplos e conceitos sobre funções, incluindo cálculo de funções, domínio, funções pares e ímpares, funções compostas e inversas.
2) São mostrados exemplos de cálculo de funções, determinação do domínio, identificação de funções pares e ímpares.
3) Também são explicados os conceitos de função composta e como calcular funções compostas, assim como o processo para encontrar a função inversa.
Este documento resume os principais conceitos de bancos de dados relacionais utilizando PostgreSQL. Inclui exemplos de criação de tabelas, tipos de busca como sequencial scan e index scan, diferentes tipos de junções como nested loop, merge join e hash join, e agregações com grupo.
Este documento apresenta uma série de exercícios de cálculo que envolvem derivar funções, encontrar equações de retas tangentes e aplicar a regra da cadeia. Os alunos devem calcular derivadas, derivar funções usando regras, encontrar equações de retas tangentes dadas funções e seus pontos e aplicar a regra da cadeia para encontrar derivadas compostas.
O documento descreve diferentes tipos de funções polinomiais e suas propriedades, incluindo grau de uma função, função identidade, função constante, função modular, função composta, função sobrejetora, função injetora e função bijetora. Exemplos ilustram cada tipo de função.
1. O documento apresenta análises exploratórias de dados e modelos de classificação para prever se uma organização é tradicional ou exponencial com base em suas características. 2. É treinado um modelo de floresta aleatória que identifica "Demandas Pendentes" como a característica mais importante. 3. Também é construída uma árvore de decisão para classificação e são comparadas suas previsões com as do modelo de floresta aleatória.
O documento contém 4 problemas sobre funções. O primeiro pede para identificar a função f dado fog. O segundo calcula a composição de funções gof. O terceiro pede a função inversa de f(x)=2x+5. O quarto calcula o valor da inversa f-1 para um dado valor.
1) O documento discute funções compostas e funções inversas, apresentando suas definições e exemplos de exercícios resolvidos.
2) A seção de funções compostas explica o que é uma função composta e apresenta um exercício resolvido.
3) A seção de função inversa define o que é uma função inversa e fornece a regra prática para obter a função inversa de uma função bijetora.
O documento discute funções quadráticas, incluindo como determinar seus zeros (ou raízes) igualando a função f(x) a zero e usando a fórmula de Bhaskara. Também mostra como escrever funções quadráticas na forma fatorada e determinar as raízes de algumas funções específicas.
O documento apresenta uma lista de exercícios sobre funções matemáticas. Os exercícios incluem identificar relações que são funções, classificar funções como injetora, sobrejetora ou bijetora, compor funções e resolver funções recursivas.
O documento descreve recursos avançados da linguagem SQL e do banco de dados PostgreSQL. Ele apresenta conceitos como Common Table Expression (CTEs), Window Functions e Full Text Search no PostgreSQL, além de detalhar a organização do padrão SQL e recursos de manipulação de dados externos. O objetivo é mostrar como otimizar consultas e acesso a dados usando recursos do padrão SQL e extensões do PostgreSQL.
1) O documento apresenta uma lista de exercícios sobre funções reais de uma variável real para a disciplina de Cálculo I. A lista contém 15 questões sobre domínios, gráficos, composição, inversa e identidades trigonométricas e hiperbólicas de funções.
2) As questões 1 a 3 pedem para determinar domínios e imagens de funções dadas, esboçar gráficos e encontrar o domínio de uma função específica.
3) As questões 4 a 11 abordam propriedades como paridade, compos
As características básicas de uma função são o domínio, contradomínio e imagem. O domínio representa os valores possíveis das abscissas, o contradomínio é o conjunto de todos os valores possíveis das ordenadas, e a imagem é o conjunto dos valores das ordenadas resultantes da aplicação da função.
1) O documento discute as propriedades da multiplicação, incluindo comutatividade, associatividade e distributividade.
2) Ele fornece exemplos de como aplicar essas propriedades para simplificar cálculos multiplicativos.
3) Exercícios são fornecidos para que o aluno pratique aplicando as propriedades da multiplicação.
1. O documento contém 32 questões sobre funções compostas e relações entre funções.
2. As questões envolvem determinar expressões algébricas, valores numéricos, domínios e conjuntos solução a partir de informações fornecidas sobre definições, gráficos e valores de funções.
3. Os tipos de funções envolvidas incluem polinômios, radiciais, exponenciais e funções definidas por partes.
Uma função composta é construída a partir de duas ou mais funções. Ela associa cada elemento do domínio da primeira função ao elemento da imagem da última função, passando pelos domínios e imagens intermediários. A função composta de f e g, denotada por gof, é definida como gof(x)=g(f(x)), mapeando cada x no resultado de aplicar primeiro f e depois g.
1. O documento apresenta 28 questões sobre funções polinomiais e trigonométricas. As questões abordam conceitos como cálculo de raízes, vértice, domínio, conjunto imagem, gráficos e resolução de equações e inequações funcionais.
Este documento é uma apostila sobre cálculo I que introduz o conceito de derivada de uma função real. A derivada representa a inclinação de uma curva em um ponto e pode ser usada para encontrar a equação da reta tangente. A apostila fornece exemplos e exercícios sobre como calcular derivadas e usar suas propriedades.
O documento demonstra que uma função f definida no intervalo 0 < x < s é uma função bijetora nesse intervalo para os reais. A função é injetiva porque valores distintos de x resultam em valores distintos de f(x). É sobrejetora porque para qualquer valor real y, existe um valor de x tal que f(x) = y, encontrado através de uma equação quadrática.
O documento discute vários tipos de joins entre tabelas em SQL, incluindo produto cartesiano, inner join, left join, right join e full join. Também cobre alias de tabelas e operadores de união como UNION, INTERSECT e MINUS para combinar resultados de consultas SQL.
O documento apresenta uma introdução às mônades em Haskell, discutindo sua definição abstrata, aplicações práticas e como elas permitem lidar com efeitos colaterais de forma pura através do uso de monóides na categoria de endofunctors.
A apresentação introduz a linguagem Go, destacando suas características como tipagem dinâmica em um sistema de tipos estáticos, ausência de herança mas presença de métodos, e dois compiladores principais. Exemplos demonstram sintaxes como declaração de variáveis, estruturas de controle, funções, maps, channels e paralelismo.
1) O documento apresenta um programa de treinamento em programação funcional em Haskell, abordando tópicos como módulos, funções de ordem superior, e o desafio de implementar a cifra de César em Haskell.
2) São apresentadas funções como map, filter, foldr que mapeiam, filtram e dobram listas, respectivamente. Também são explicadas funções de composição e predicados com all e any.
3) Como desafio, o aluno deve implementar em Haskell a cifra de César, um método simples de criptograf
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
O documento apresenta uma introdução ao workshop de Python realizado na IEEE Week '17. Apresenta brevemente conceitos fundamentais da linguagem como variáveis, funções, listas, dicionários e operações com strings. Explica também como ler e processar dados de ficheiros e da internet usando bibliotecas como urllib e json.
Este documento apresenta conceitos iniciais sobre funções matemáticas, incluindo:
1) Definição de função como uma relação entre dois conjuntos onde cada elemento do primeiro conjunto está associado a um único elemento do segundo conjunto;
2) Exemplos de relações que são e não são funções;
3) Elementos que compõem uma função como domínio, contradomínio e conjunto imagem.
O documento apresenta conceitos iniciais sobre funções matemáticas, incluindo definição de função, exemplos de relações binárias que são ou não funções, elementos de uma função como domínio, contradomínio e conjunto imagem. Também apresenta exemplos de gráficos de funções do primeiro grau e conceitos sobre vértice de funções quadráticas.
1) O documento apresenta questões sobre conjuntos, funções e equações algébricas.
2) A questão 1 trata de subconjuntos de um conjunto universo U e relações entre eles.
3) A questão 2 envolve conversão de tipos de combustível em veículos e cálculo do número de carros tricombustíveis.
4) As demais questões abordam propriedades de funções, raízes de polinômios e equações algébricas.
abre uma janela gráfica interativa
subplot(m,n,p): divide o gráfico em m linhas e n colunas, plotando na posição p
plot2d(x,y): plota em 2D
plot3d(x,y,z): plota em 3D
grid: adiciona grade ao gráfico
xlabel(†̃xâ€TM), ylabel(†̃yâ€TM): adiciona rÃ3tulos aos eixos
title(†̃tÃtuloâ€TM): adiciona tÃ
O documento descreve um trabalho sobre módulo matemático. Apresenta uma introdução sobre o assunto e é dividido em seções sobre definição de módulo, interpretação geométrica, propriedades, exercícios resolvidos e propostos, equações modulares, inequações modulares e gabarito. O objetivo é ensinar o conceito de módulo de forma simples, com teoria e exercícios.
O documento discute funções exponenciais e logarítmicas, incluindo:
1) Equações e propriedades de funções exponenciais e logarítmicas
2) Função logarítmica e suas propriedades
3) Equações logarítmicas
O documento apresenta informações sobre funções exponenciais e logarítmicas, incluindo:
1) Definições e propriedades de funções exponenciais e logarítmicas;
2) Exemplos de equações e inequações exponenciais;
3) Forma e propriedades da função logarítmica.
1) O documento apresenta conceitos sobre funções polinomiais do 1o e 2o grau, incluindo suas representações gráficas e cálculo de raízes.
2) São fornecidos exemplos de problemas envolvendo funções afins e quadráticas, com soluções passo a passo.
3) O documento aborda conceitos matemáticos importantes sobre funções do 1o e 2o grau de forma didática, com exemplos ilustrativos.
Este documento apresenta conceitos iniciais sobre funções matemáticas, incluindo definição de função, elementos de uma função e exemplos de relações que são ou não são funções. Também apresenta conceitos sobre gráficos de funções do primeiro grau e do segundo grau.
Este documento descreve funções e estrutura de blocos em programação. Ele apresenta exemplos de como definir funções para calcular fatorial, maior entre dois números e seno/cosseno/arctangente usando séries de Taylor. Também explica o escopo de variáveis em diferentes blocos e como variáveis locais e globais funcionam.
1) O documento discute o conceito de fatoração de polinômios, apresentando diferentes métodos como fator comum, agrupamento e diferença de dois quadrados.
2) Exemplos e exercícios são fornecidos para cada método com o objetivo de praticar a fatoração de expressões algébricas.
3) Os principais métodos discutidos são fator comum, agrupamento, diferença de dois quadrados e trinômio perfeito.
O documento fornece uma introdução básica sobre o MATLAB, abordando tópicos como matrizes, vetores, gráficos, programação e arquivos M. É destacada a extensibilidade do MATLAB, permitindo que usuários contribuam para o enriquecimento do software. São apresentados comandos como HELP, LOOKFOR, PLOT e exemplos de uso de estruturas de repetição e condicionais.
O documento apresenta os conceitos básicos de logaritmo, incluindo definição, propriedades, mudança de base, equações e funções logarítmicas. Exemplos são fornecidos para ilustrar cada tópico, e exercícios no final avaliam a compreensão dos conceitos apresentados.
A avaliação preguiçosa (lazy evaluation) em Scala permite atrasar a avaliação de expressões até que seus valores sejam necessários, evitando avaliações repetidas e possíveis erros em locais diferentes do código. Isso é implementado através de lazy vals, streams e call by name.
O documento apresenta os principais tópicos sobre o software MATLAB, incluindo definição e aplicações do MATLAB, ambiente de trabalho, variáveis, operadores matemáticos, matrizes, sistemas lineares, polinômios, cálculo diferencial e integral e equações diferenciais.
1) O documento descreve como usar o programa Winplot para criar gráficos 2D e 3D, incluindo como instalá-lo e suas principais funções. 2) Ele fornece detalhes sobre como criar diferentes tipos de gráficos 2D como explícitas, paramétricas e polares, além de explicar as operações e funções matemáticas suportadas. 3) O documento também aborda a criação de gráficos 3D e os recursos adicionais do Winplot.
Semelhante a Sobre programas e funções: pensando em abstração (20)
5. Arthur Xavier
Estudante de Ciência da Computação;
Apaixonado por programação funcional;
Membro ativo da comunidade FP;
Desenvolvendo com Phil Freeman uma formalização
de interfaces de usuário declarativas com Comonads;
6. OU COMO
PROGRAMAÇÃO FUNCIONAL É UMA ÓTIMA FERRAMENTA PARA CONTROLE
DE COMPLEXIDADE.
PROGRAMAS E FUNÇÕES
SOBRE
PENSANDO EM ABSTRAÇÃO,
7. Outline
Por que programação funcional;
Abstrações funcionais;
Complexidade sem dificuldade:
1. Monóides;
2. Mônadas.
10. comando1();
comando2(); // mudança de estado
variável = comando3(); // estado privado
if (variável.atributo)
exceção!
envia_email(); // mudança de estado
lança_míssil();
// return variável;
13. Linguagens convencionais
Semântica sequencial de transições de estado;
Divisão entre mundo das expressões vs. comandos;
Dificuldade de combinar programas;
Ausência de propriedades matemáticas.
31. Conjunto S com uma operação binária •, tal que
1. ∀a,b ∈ S : a•b ∈ S. (fechamento)
2. ∀a,b,c ∈ S : (a•b)•c = a•(b•c). (associatividade)
3. ∃e ∈ S : ∀a ∈ S : e•a = a•e = a. (identidade)
49. HASKELL
data Add = Add Int
instance Monoid Add where
Add a <> Add b = Add (a + b)
mempty = Add 0
…
data Mult = Mult Int
instance Monoid Mult where
Mult a <> Mult b = Mult (a * b)
mempty = Mult 1
50. HASKELL
foldMap :: Monoid m => (a -> m) -> [a] -> m
foldMap f [] = mempty
foldMap f (a:as) = f a <> foldMap f as
55. HASKELL
data Builder a = Builder (a -> a)
instance Monoid (Builder a) where
Builder f <> Builder g = Builder (f . g)
mempty = Builder id
build :: a -> Builder a -> a
build def (Builder builder) = builder def
57. Disjunção de predicados;
Conjunção de predicados;
Conjuntos com união;
Composição de opções;
Combinação de regras;
Interseção de formas bidimensionais;
Funções que retornam monóides;
Combinação de máquinas de estado;
61. HASKELL
add1 :: Int -> (Int, String)
add1 x = (x + 1, "+1")
mul3 :: Int -> (Int, String)
mul3 x = (x * 3, "*3")
-- deseja-se
add1 30 ?? mul3 ?? add1 = (94, "+1*3+1")
-- mas o que é (??)
62. HASKELL
add1 :: Int -> (Int, String)
add1 x = (x + 1, "+1")
mul3 :: Int -> (Int, String)
mul3 x = (x * 3, "*3")
-- ou ainda
do
x <- add1 30
y <- mul3 x
add1 y
63. HASKELL
add1 :: Int -> (Int, String)
add1 x = (x + 1, "+1")
mul3 :: Int -> (Int, String)
mul3 x = (x * 3, "*3")
-- deseja-se
add1 30 ?? mul3 ?? add1 = (94, "+1*3+1")
-- mas o que é (??)
75. HASKELL
data Writer a = Writer (a, String)
instance Monad Writer where
pure a = Writer (a, "")
Writer (a, s) >>= f = Writer (b, s ++ s2)
where
Writer (b, s2) = f a
77. HASKELL
data Writer t a = Writer (a, t)
instance Monoid t => Monad (Writer t) where
pure a = Writer (a, mempty)
Writer (a, t) >>= f = Writer (b, t <> t2)
where
Writer (b, t2) = f a
78. HASKELL
add1 :: Int -> Writer String Int
add1 x = Writer (x + 1, "+1")
mul3 :: Int -> Writer String Int
mul3 x = Writer (x * 3, "*3")
add1 30 >>= mul3 >>= add1 = (94, "+1*3+1")
79. HASKELL
add1 :: Int -> Writer String Int
add1 x = Writer (x + 1, "+1")
mul3 :: Int -> Writer String Int
mul3 x = Writer (x * 3, "*3")
do
x <- add1 30
y <- mul3 x
add1 y
80. HASKELL
tell :: Monoid t => t -> Writer t ()
tell t = Writer ((), t)
add1 x = do { tell "+1"; pure (x + 1) }
mul3 x = do { tell "*3"; pure (x * 3) }
do
x <- add1 30
y <- mul3 x
add1 y
82. HASKELL
data State s a = State (s -> (a, s))
instance Monad (State s) where …
put :: s -> State s ()
put s = _ -> ((), s)
get :: State s s
get = s -> (s, s)
modify :: (s -> s) -> State s ()
modify f = s -> ((), f s)
83. HASKELL
put :: s -> State s ()
get :: State s s
modify :: (s -> s) -> State s ()
…
add1 x = do
modify (log -> log <> "+1")
pure (x + 1)
mul3 x = do
modify (log -> log <> "*3")
pure (x * 3)
85. HASKELL
data Maybe a = Nothing | Just a
instance Monad Maybe where …
head :: [a] -> Maybe a
…
tryGetLastPhoto username = do
user <- tryGetUser username
photos <- tryGetPhotos user
head photos