Aula 9

livro texto (cap 11 e 9)

Haskell online outro - so compilado

1 Maybe

data Maybe a = Nothing | Just a

Resultado de algumas funções que podem não ter resultado

:m + Data.List
find (>4) [1,2,3,4,5,6,7]

find (>14) [1,2,3,4,5,6,7]
import Data.Map.Strict as M

let dd =  M.fromList [("a",3),("b",5),("g",8)]

M.lookup "b" dd

M.lookup "f" dd

1.1 Funções do Maybe

1.2 Maybe como container

O Just a é o "valor correto" e Nothing é o valor errado. Eu gostaria de poder continuar processando um Maybe enquanto o valor esta "correto"

fmap (*5) (Just 6)

fmap (*5) Nothing

1.2.1 Functor

Um container é um functor se ele implementa a função fmap

:t fmap

:t map

fmap é muito parecido com o map, ou na verdade o container lista é um functor!!

O fmap aplica uma função que funciona no tipo de dentro para dentro do container

Eu gostaria que:

(Just 7) + (Just 3) ==> Just 10

(Just 7) + Nothing ==> Nothing

1.2.2 applicative

Um container é um applicative se ele permite jogar uma função binaria que funciona no tipo interno para dentro do container

(+) <$> (Just 7) <*> (Just 3)

(+) <$> (Just 7) <*> Nothing

1.2.3 monad

Um container é uma monad se ele implementa (entre outras coisas) a função infixa >>= que remove o dado de um container para aplica-lo a uma função que esta esperando o tipo interno

:t (>>+)

(Just 8) >>= (\x -> if odd x then Nothing else (Just (2*x+1)) )

Monad também a função return que coloca um valor dentro do container

2 I/O

Toda I/O esta dentro de uma monada IO

:t getLine

:t putStrLn
  • getLine le uma linha e retorna o string dentro da monada IO
  • putStrLn recebe um string, imprime ele, e retorna uma tupla vazia dentro de IO
main = do 
       dados <- getLine
       let saida = proc dados
       putStrLn saida

  • getContents le tudo
  • print converte argumentos para string e imprime
  • Int= para converter um sting para inteiros
  • Float= para converter p/ float
  • funções lines para quebrar um string em linhas e words para quebrar uma linha nos brancos
  • funçoes unlines e unwords para montar o string final

Author: Jacques Wainer

Created: 2018-09-11 Tue 13:52

Validate