Haskell
Centro de Informática – UFPE
Roteiro







História
Paradigma
Utilização
Sintaxe
Implementação
Exemplos
Vantagens & Desvantagens
História
Desenvolvida em 1990 pelo FPAC
 Haskell 1.0 - 1.4
 Haskell 98 Report
 Haskell-prime

Paradigma
Totalmente baseado em funções
 Não existem atribuições (assignments) !
 Lazy Evaluation
 High-order Functions

Utilização
Jogos
 Compiladores
 IA (Problemas algébricos e lógica
proposicional)

Sintaxe
Trabalha-se somente com funções, seus
parâmetros e seus retornos
 É case-sensitive
 Não possui comandos de repetição como
While e For
 Sem limites para identificadores

Sintaxe

Tipos Básicos
 Bool(Booleano)
 Int(Inteiro
limitado)
 Integer(Inteiro ilimitado)
 Float(Real)
 Char(Caractere)
Sintaxe( Tipos Básicos )
 Void
 Tuplas
 Listas
 Funções
Sintaxe

Módulos
module Main where
main = putStrLn “Hello, World!”
Sintaxe

Funções
multiplica x y = x*y
Sintaxe

Listas
["Bob", "John"]
"Bob" : "John" : []
Sintaxe

:: (dois-pontos duplo)
5
'a‘
Inc
[1,2,3]
('b',4)
::
::
::
::
::
Integer
Char
Integer -> Integer
[Integer]
(Char,Integer)
Sintaxe

do
main = do putStr "You are? "
name <- getLine
greet name
Obs.: Utilização de layout (identação), substituindo os parênteses
Sintaxe

Recursão (simulação de loops)
printAll :: [String] -> IO ()
printAll []
= return ()
printAll (x:xs) = do putStrLn x
printAll xs
Sintaxe

Operador $
greet name = putStrLn $ greeting name
Sintaxe

If then else
greeting :: String -> String
greeting name =
if name = = "Haskell"
then "Hey, whadda ya know? This is a Haskell program!"
else "Hello, " ++ name ++ "!"
Sintaxe

Outros
 case
 Sobrecarregamento
 ect,
etc...
(“Overloading”)
Implementação







Hugs
GHC
Nhc98
HBC
Helium
Jhc
Yhc
Implementação

Hugs
 Interpretador
 Escrito
em C
 Portável
 Leve
 Ideal para iniciantes
Implementação

GHC
 Interpretador
e Compilador
 Escrito em Haskell
 Menos portável
 Mais lento
 Exige mais memória
 Produz programas mais rápidos
Exemplos
module Main where
main :: IO ()
main = do putStr “Qual é o seu nome? "
nome <- getLine
cumprimento nome
cumprimento :: String -> IO ()
cumprimento nome = putStrLn $ cumprimentar
nome
Exemplos
cumprimentar :: String -> String
cumprimentar nome =
if nome == "Haskell"
then “Opa, eu te conheço? Este é um
programa em Haskell!"
else if nome == “Java"
then “Boa linguagem"
else “Olá, " ++ nome ++ "!"
Vantagens
Fortemente Tipada e Estática
 Avaliação Lazy
 Polimorfismo Universal Paramétrico
 Função (superior e parcial)
 Ausência de variáveis globais e desvios
incondicionais

Desvantagens
Avaliação Lazy
 Muita memória
 Execução lenta

Dúvidas
Haskell
Centro de Informática - UFPE
Download

Haskell - Centro de Informática da UFPE