Maratona de Haskell - Quadragésimo Terceiro à Quadragésimo Quinto

Fala galera!

No último post nós vimos como importar módulos e agora vamos ver como criar nossos próprios módulos.

Como vimos no último pos criar um módulo para colocar funções e tipos que devem trabalhar juntos é uma boa prática.


Criar um módulo

Criar um novo módulo é super simples e somente temos que colocar essa linha de código no topo do arquivo.

Continue

Maratona de Haskell - Quadragésimo Primeiro à Quadragésimo Segundo Dia

Fala galera!

Nós terminamos nossos exercícios com a Binary Search Tree no último post e agora vamos voltar a seguir o livro que estavamos seguindo.
Hoje vamos iniciar a falar sobre módulo em Haskell.


O que são módulos?

Bem, módulos são arquivos onde podemos defininir functions, types e type classes.
Um módulo tem um monte de definições e podemos exportar apenas algumas delas. Essa é a mesma ideia que temos de público e privado em orientação a objeto.

Continue

Maratona de Haskell - Trigésimo Quarto à Quadragésimo Dia

Fala galera!

No último post nós vimos algumas funções para calcular o tamanho e altura de nossa Binary Search Tree (BST).
Hoje será o último post sobre os exercícios com BST e nós criaremos a função para remover nodos.


Revisão da BST

Vamos apenas recapitular como eram as funções size e height que trabalhamos no post anterior.

Primeiro a função size para trabalhar com uma BST que significa obter o número de elementos que existem em uma BST. BST.

size :: (Ord a) => Tree a -> Int
size Empty = 0
size (Node _ left right) = 1 + (size left) + (size right)

> let tree = build [8,6,9,4,7,11,10,12,8,6,2,3,1]
> tree
Node 8 (Node 6 (Node 4 (Node 2 (Node 1 Empty Empty) (Node 3 Empty Empty)) (Node 6 Empty Empty)) (Node 7 Empty (Node 8 Empty Empty))) (Node 9 Empty (Node 11 (Node 10 Empty Empty) (Node 12 Empty Empty)))

> size tree
13

> let newTree = find tree 6
> newTree
Node 6 (Node 4 (Node 2 (Node 1 Empty Empty) (Node 3 Empty Empty)) (Node 6 Empty Empty)) (Node 7 Empty (Node 8 Empty Empty))

> size newTree
8
Continue

Maratona de Haskell - Trigésimo Segundo à Trigésimo Terceiro Dia

Fala galera!

No último post nós vimos algumas funções para encontrar um elemento na árvore ou confirmar se a árvore contém ou não um elemento.
Hoje aprenderemos como calcular o tamanho e altura de uma BST.


Revisão

Primeiramente vamos fazer uma rápida revisão sobre encontrar elementos e confirmar se um elemento existe ou não em nossa BST.

Primeiro como encontramos um elemento em nossa árvore.

find :: (Ord a) => Tree a -> a -> Tree a
find Empty _ = Empty
find (Node a left right) x
  | a == x = Node a left right
  | a >= x = find left x
  | otherwise = find right x
Continue

Maratona de Haskell - Vigésimo Nono à Trigésimo Primeiro Dia

Fala galera!

No último post nós melhoramos a nossa função build e vimos algumas opções usando a função insert que nós criamos para adicionar nodos na nossa BST.
Agora vamos ver algumas funções para encontrar um elemento na árvore ou confirmar se a árvore contém ou não um elemento.


Recapitulando

Primeiro vamos fazer uma rápida revisão de como chegamos até aqui.

Nós começamos criando um tipo para a nossa BST.

data (Ord a, Eq a) => Tree a = Empty | Node a (Tree a) (Tree a)
  deriving Show
Continue

Maratona de Haskell - Vigésimo Sétimo à Vigésimo Oitavo Dia

Fala pessoal!

No último post nós vimos como construir uma Binary Tree Search (BST) a partir de uma lista. Hoje nós vamos falar sobre a função insert que pode adicionar um nodo em nossa BST.


Relembrando BST

Nós já sabemos como construir uma BST a partir de uma lista. Nós temos a função build e uma função auxiliar para nos ajudar. A função auxiliar tem um acumulador que seria a nossa árvore.

Continue

Maratona de Haskell - Vigésimo Quinto à Vigésimo Sexto Dia

Fala pessoal!

No último post nós falamos sobre Binary Tree Search (BST) e nós vimos como criar um tipo para trabalhar com ela e como escrever uma função simples.
Hoje veremos como contruir uma BST a partir de uma lista.


BST Revisão

Nós já sabemos que temos que criar um novo tipo para trabalhar com uma BST.

data (Ord a, Eq a) => Tree a = Empty | Node a (Tree a) (Tree a)
  deriving Show
Continue

Maratona de Haskell - Vigésimo Terceiro à Vigésimo Quarto Dia

Fala pessoal!

Esses últimos dias estou trabalhando em alguns exercícios e queria convidar vocês a criar uma Binary Search Tree (BST) comigo.
A BST é uma estrutura de dados que possui os dados ordenados facilitando a busca dos mesmos dentro dela. A BST segue algumas regras onde valores menores ou iguais a raíz devem ficar à esquerda e os valores maiores à direita. Por causa disso os valores em uma BST devem ser comparáveis como Int, Char e etc são.

Continue

Maratona de Haskell - Décimo Nono até Vigésimo Segundo Dia

Fala pessoal!

Vamos começar falando sobre o operador Functional Application que è uma função que nos ajuda a remover os parênteses de nossas funções. Enquanto Function Application com espaços são associadas à esquerda a Function Application com $ é associada à direita e por causa disso nós podemos adicionar funções sem parênteses.

Function Application com espaços: f a b c => ((f a) b) c)
Function Application com $: f a b c => (f (a (b c)))

Continue

Maratona de Haskell - Décimo Quarto, Quinto e Sexto Dias

Fala pessoal!

Primeiramente uma explicação porque eu não escrevi os posts dos dias 14, 15 e 16 separadamente. Eu percebi que eu estava perdendo muito tempo dos meus estudos fazendo os posts e por causa disso eu irei tentar uma nova estratégia para ser mais produtivo.

Continue

Maratona de Haskell - Décimo Terceiro Dia

Fala pessoal!

Ontem nós reescrevemos algumas funções standar do Haskell e como eu comentei essas funções estavam usando recursão. Provavelmente a maioria ou a totalidade de vocês sabe o que é recursão. Mas se por acaso alguém não sabe eu vou explicar em poucas palavras.

Continue

Maratona de Haskell - Décimo Segundo Dia

Fala pessoal!

Hoje nós contiamos fazendo exercícios. Ontem fizemos alguns exercícios e no exercício nove nós usamos duas funções standard do Haskell que foram takeWhile e dropWhile. Agora vamos fazer algo levemente diferente, nós vamos criar nossas próprias takeWhile e dropWhile e usa-las no exercício nove.

Continue

Maratona de Haskell - Décimo Primeiro Dia - Parte 1

Fala Pessoal!

Ontem nós finalizamos os três primeiros capítulos do livro que estamos acompanhando. Hoje vamos dividir nosso dia em duas partes. Primeiro vamos fazer uma revisão dos 10 primeiros dias e depois alguns exercícios.

Primeiro vamos para uma rápida revisão.

Continue

Maratona de Haskell - Décimo Dia

Fala pessoal!

Hoje vamos falar sobre duas diferentes formas de trabalhar com Pattern Matching que são let..in e case..of.

Nós já vimos um pouco sobre let..in no primeiro dia quando nós o usamos para criar “variáveis” GHCI, mas podemos usa-las levemente diferente.

Continue

Maratona de Haskell - Nono Dia

Fala pessoal!

Ontem nós falamos sobre ´Pattern Matching* e hoje nós vamos iniciar com um especial caso de *Pattern Matching*. Se nós precisamos da lista original durante o *Pattern Matching* nós podemos usar algo chamado *as-pattern`. Eu não acho este caso especial tão útil, mas eu vou mostrar um exemplo:

Continue

Maratona de Haskell - Oitavo Dia

Fala pessoal!


Hoje vamos falar de Pattern Matching uma das melhores funcionalidades em Functional Programming na minha opinião.

Como a maioria das linguagens funcionais Haskell tem Pattern Matching que faz nossas vidas muito mais fácil apra criar funções com diferentes ações dependendo do que é recebido. Pattern Matching é sobre avaliar dados e desconstrui-los de acordo com seus padrões. A ideia atrás de Pattern Matching é fazer nossos programas mais simples e legíveis. Vamos mergulhar em alguns exemplos e entender o porque.

Continue

Maratona de Haskell - Sétimo Dia

Fala pessoal!

Hoje o estudo sobre Haskell foi um pouco diferente. Ao invés de seguir o livro eu fui a um meetup. Este foi meu primeiro meetup em Berlim e fui muito legal e diferente.
Este meetup acontece todas as Quarta-feiras e cada semana tem um diferente objetivo. Uma semana é um meetup com palestras e etc, e na outra é para iniciantes aprenderem a linguagem.
Hoje o meetup foi para iniciantes. O grupo esta seguindo um livro chamado “Haskell Programming” e hoje eles cobriram o oitavo capítulo que é sobre foldr e foldl.

Continue

Maratona de Haskell - Sexto Dia

Fala pessoal!

Ontem nós entendemos como tipos funcionam em Haskell, quais os tipos que Haskell suporta e que nós temos tipos variáveis que podem nos ajudar bastante. Hoje vamos falar sobre type classes. Primeiro de tudo temos que dizer que type classes não são classes. Com este aviso nós podemos ir em frente e descobrir o que diabos são type classes.

Continue

Maratona de Haskell - Quinto Dia

Fala pessoal!

Qual é o seu tipo?
Hoje nós vamos entender, ou tentar, um pouco como o sistemas de tipo de Haskell funciona.

Em Haskell tudo tem um tipo e eles são validados em tempo de compilação. Isso faz o código ser mais seguro, porque os erros são pegos brevemente e não durante a execução.
Diferentemente de outras linguagens como Java e C#, Haskell tem inferência de tipos. Isso significa que não é necessário dizer para o Haskell qual o tipo de cada elemento, e nosso código não se torna verboso.

Continue

Maratona de Haskell - Quarto Dia

Fala pessoal!

Hoje vamos falar um pouco mais sobre listas, mas nós vamos dar uma olhada também em tuplas.


List Comprehension

Nos dias dois e três nós vimos como criar e usar listas, hoje vamos continuar falando de outra forma de usar listas chamado list comprehension. List comprehensions são o caminho para transformar, combinar e filtrar listas. Isso é similar ao conceito de set comprehension na matemática, mas nós não prestaremos atenção nisso. Vamos iniciar dizendo que queremos gerar uma lista com os valores de 1 até 10 todos multiplicados por 2. Com list comprehension nós podemos fazer desta forma:

Continue

Maratona de Haskell - Terceiro Dia

Fala pessoal!

Vamos continuar dando uma olhada em listas? Ontem nós vimos como concatenar e obter elementos de listas. Hoje vamos ver outras funcionalidades que Haskell prove para listas.

Continue

Maratona de Haskell - Segundo Dia

Hoje é o meu segundo dia na maratona de Haskell e nós vamos falar sobre o condicional IF e listas.

Condicional (IF)

Em Haskell como em outras linguagens nós podemos usar condicionais para produzirmos funções mais interessantes. Uma das condicionais mais famosas é o IF que nos permite testar se um valor ou clausula é verdadeiro ou não e retornar um novo valor seguindo este teste. A grande diferença entre Haskell e as outras linguagens é que Haskell nos proíbe de termos um IF sem ELSE. Isso acontece porque em Haskell todas as funções devem ter um retorno e se temos uma clausula IF sem ELSE nós podemos ter uma função sem nenhum retorno. Vamos dar uma olhada em alguns exemplos usando IF:

Continue

Por que e o que é Programação Funcional?

Fala pessoal!

Hoje vamos falar um pouco de paradigma e programaçāo funcional (FP). Paradigma funcional é uma abordagem diferente de trabalhar com desenvolvimento de software do qual a maioria dos desenvolvedores estāo acostumados. Provavelmente você como a maioria dos desenvolvedores esta trabalhando ou trabalhou com os paradigmas Imperativo e / ou Orientado a Objeto (OO). Entāo o paradigma funcional tem algumas diferentes ideias para resolver o mesmos problemas quais imperativo e orientaçāo a objeto resolvem também, e como tudo tem prós e contras para serem avaliados.

Continue

Maratona de Haskell

Fala pessoal!

Hoje eu estou iniciando uma maratona de Haskell onde eu irei mergulhar na linguagem de programação Haskell pelos próximos 3 meses.

Legal!!! Mas por que? Eu estou realmente interessado em aprender mais sobre Programação Funcional, qual eu já aprendi alguns conceitos e estou os utilizando, e eu acho que iniciar esse processo com Haskell é uma boa ideia.

Continue

Maratona de Haskell - Primeiro Dia

Hoje foi o primeiro dia da minha maratona de Haskell e eu gostaria de compartilhar com vocês meus aprendizados e entendimentos.


Configuração

Vamos iniciar com como configurar seu computador para usar Haskell. Você tem que instalar o Haskell compilador que é chamado GHC. Os passo de instalação estão nesse link. Minha dica é não instalar o compilador do Haskell em sua máquina, e sim usar uma imagem Docker com Haskell para isso. Se você não tem Docker instalado em seu computador você pode ver como instala-lo aqui. Depois de instalar o Docker você somente necessita inicia-lo e rodar o comando: docker run -ti –rm -v $(pwd):/code haskell:7.10 bash. Agora você tem uma máquina virtual rodando o compilador do Haskell para você. Para iniciar o interpretador do GHC você tem que executar o comando: ghci.

Continue

Using local storage with React and Redux

Geralmente nosssas applicações iniciam o Redux's store com um objeto vazio para mostrar que a aplicação não tem nenhum dado ao ser iniciada. No futuro quando usuários tiverem alguma interação ou quando a aplicação receber dados do back-end então o store irá manter esses dados. Essa é uma abordagem muito comum para usar Redux em um projeto React, ao menos em projetos no qual eu trabalhei até agora, mas as vezes nós necessitamos uma outra abordagem.

Para criar um store com Redux nós temos que usar uma função chamada createStore qual nós importamos do Redux e passamos como parâmetro os nossos reducers.

Continue

Welcome

Fala pessoal!!!!

Hoje estou iniciando um novo blog.

Eu gostaria de usar este canal para compoartilhar com vocês o que eu estou fazendo e estudando. Nos últimos anos tenho trabalho com back-end e front-end e eu ainda continuo fazendo isso.

Continue