Uma Introdução a Haskell e Programação Funcional
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.