Haskell é uma linguagem de paradigma funcional, fortemente tipada e estática.
Toda linguagem com paradigma funcional é imutável e usa expressões matemática, não têm efeitos colaterais, evita bugs.
Haskell tem laziness que seria processamento preguiçoso, ele não calcula coisas desnecessárias, só o que é preciso.
Haskell não é uma linguagem para iniciantes! se você for bastante curioso e inteligente, mesmo ela sendo diferente de todas linguagens você poderá compreendê-la com o tempo,e seu conhecimento vai se expandir bastante.
sudo add-apt-repository -y ppa:hvr/ghc
sudo apt-get update
sudo apt-get install -y cabal-install-XXX ghc-YYY
sudo pacman -S ghc cabal-install happy alex haskell-haddock-library
sudo dnf install ghc cabal-install stack
Para instalar no Windows acesse o site oficial do Haskell -> Site do Haskell
Já vou supor que você já instalou o Haskell tanto pro Windows/Linux. O Haskell tem o compilador e o interpretador.
- Compilador é chamado de GHC, que seria Glasgow Haskell Compiler.
- Interpretador é chamado de GHCI.
Abra o terminal e digite ghci, depois disso aparecerá uma mensagem assim:
GHCi, version 8.10.2: https://www.haskell.org/ghc/ :? for help**
Prelude>
Agora já estamos dentro do interpreter do Haskell, vamos fazer nosso primeiro Hello world nele, Digite o seguinte ->
putStrLn "Hello, world!"
depois que você digitar isso terá que aparecer o seguinte:
Se você seguiu tudo corretamente até agora, você terá o mesmo resultado que eu.
main = putStrLn "Hello world"
Para fazer essa forma abaixo é necessário abrir o seu editor de código e instalar a extensão do haskell.
data HelloWorld x = Hello x deriving(Show)
(£) :: HelloWorld x -> HelloWorld x
(£) x = x
data é para criar um tipo, o HelloWorld é o nome do tipo, a primeira letra sempre maiúscula, o x é um parâmetro.
esse meu tipo está definindo uma função Hello com o parâmetro x, e deriving é pra derivar a classe Show, para exibir na tela o resultado, sem ela daria erro. Resultado:
Em haskell é possivel construir listas de quaisquer tipos usando expressões que podem ser distribuidas a todos os elementos de um dado vetor, usando compreensão de listas.
lista :: [Int] -> [Int]
lista xs = [4*x | x <- xs]
Definimos nossa assinatura da função na primeira linha, na segunda já criamos a função com o parâmetro xs, se x estiver dentro de xs multiplique todos elementos que você digitou na lista por 4.
Vamos ver um pouco sobre lambda, uma lambda é uma função anônima, você usa e depois sai mais cedo, lambda não precisa definir pra usar ela
Alguns exemplos de lambdas
(\x -> (x * x)) 100
(\x y -> x /y) 10 2
(\x1 y1 -> y1 : x1) [] "Lambda"
foldl (\x1 y1 -> y1 : x1) [] "Lambda Russa!"
Esses são alguns exemplos de como é uma lambda em haskell, elas servem para cálculos, como disse você usa e depois sai mais cedo,não precisa definir, mas se quiser pode. Definindo uma lambda ->
lambda = (\y x -> x / y) 2 10
Vamos ver agora Recursão, uma recursão ela serve para não cair em loops infinitos, ela precisa ter uma base (inicio de partida) exemplo
fibonacci x
| x == 0 = 0
| x == 1 = 1
| otherwise = fibonacci(x-1) + fibonacci(x-2)
o | é chamado de guards em haskell, ele é mesma coisa que um if, por exemplo:
se x == 0 = 0**
se x == 1 = 1**
senao = fibonacci(x-1) + fibonacci(x-2)**
Bom, vou ficando por aqui, quem se interesso e quiser estudar mais procure por livros na internet sobre haskell.
- Qualquer duvida abra uma ISSUE!