Uma Introdução a Haskell e Programação Funcional

Guilherme de Jesus, Hello WorldHaskell
Back

Introdução

Vamos começar com um pouco de contexto sobre programação funcional. Programação funcional é um paradigma de programação com onde tem como foco e filosofia as funções, basicamente tudo nele é uma função ou uma expressão que resulta em um valor

Haskell é uma linguagem puramente funcional, de proposito geral e um maior foco academico, onde possui como principal caracteristica tipagem forte, inferencia de tipo e avaliação preguiçosa(Lazy evaluation)

Agora sim, "Hello world!"

Para não perder o costume vamos começar com "Hello world!" que é bastante simples

main = putStrLn "Hello, World!"

ou

module Main (main) where

main :: IO ()
main = putStrLn "Hello, World!"

Os dois exemplos de "hello Wolrd" funcionam perfeitamente, e na pratica podemos dizer que são iguais. Tirando a primeira linha onde possui o module que serve como um namespace/packeger em linguagem orientada a objetos, os dois são iguais. No primeiro exemplo o compilador e interpretador faz uma inferencia de tipo, a inferencia de tipo é oque torna possivel escrever codigos em haskell com tipos genericos ou até sem tipo, mas lembrece que haskell é fortemente tipada

O método putStrLn se trata de um metodo de I/O em haskell que printa strings na tela

Sintaxe basica

Como haskell é basicamente um avaliador de expressão então basicamente tudo pode ser definido como uma expressão, ou uma função;

Então se pegarmos uma função matematica como

f(x) = x + 1 

Podemos traduzir em haskell para

f x = x + 1

Onde x é o nome da função e x seu parametro e tudo depois do = é expressão a ser avaliada para se ter um valor

Para criar funções com mais de um parametro basta adicionar um outro valor ao lado do nome da função:

sum x y = x + y

caso queira definir o tipo da função você mesmo para poupar o compilador basta encima da função colocar o nome da função seguida de :: (dois pontos dois pontos) e os tipos em seguida

sum :: Int -> Int -> Int
sum x y = x + y

os tipos normalmente são em maiúsculo. depois teremos uma explicação melhor sobre definir tipos

Main, do e IO

Haskell assim como python não precisa de {}(chaves) para definir escopo nem de ;(ponto e vírgula) no final de uma instrução. Então tudo que tiver escrito no arquivo fara parte do mesmo escopo, mas como tudo se trata de funções temos a função main como uma função especial que define onde começar o escopo principal caso queiramos ter um fluxo de trabalho

Caso tente fazer um metodo main vera que ao colocar mais de 1 comando teremos um erro no codigo pois uma função so pode ter 1 retorno, então a não ser que voce queira usar uma função dentro da outra sera necessario usar a notação do, que serve para criar ums especie de escopo para IO, mas essa não é a unica forma de fazer isso, porem é a mais utilizada no inicio do aprendizadod e haskell

main :: IO ()
main = do 
    putStrLn "Hello, World!"
    putStrLn "Welcome the haskell language."

© Guilherme de jesus.