Articles of haskell

Produto cartesiano de 2 listas em Haskell

Eu gostaria de produzir o produto cartesiano de 2 listas em Haskell, mas não posso descobrir como fazê-lo. O produto cartesiano fornece todas as combinações dos elementos da lista: xs = [1,2,3] ys = [4,5,6] cartProd :: [a] -> [b] -> [(a,b)] cartProd xs ys ==> [(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)] Esta não é uma questão real de lição […]

runST e composição de funções

Por que este typecheck: runST $ return $ True Enquanto o seguinte não: runST . return $ True GHCI reclama: Couldn’t match expected type `forall s. ST s c0′ with actual type `m0 a0′ Expected type: a0 -> forall s. ST s c0 Actual type: a0 -> m0 a0 In the second argument of `(.)’, […]

Explique esse pedaço de código haskell que gera um stream de primos

Eu tenho dificuldade em entender esse pedaço de código: let sieve (p:xs) = p : sieve (filter (\ x -> x `mod` p /= 0) xs) in sieve [2 .. ] Alguém pode quebrar isso por mim? Eu entendo que há recursion nele, mas esse é o problema, não consigo entender como funciona a recursion […]

Faixas Haskell e flutuadores

Por que o comportamento da notação de intervalo Haskell é diferente para floats do que para inteiros e caracteres? Prelude> [1, 3 .. 10] :: [Int] [1,3,5,7,9] Prelude> [1, 3 .. 10] :: [Float] [1.0,3.0,5.0,7.0,9.0,11.0] Prelude> [‘a’, ‘c’ .. ‘f’] “ace” Eu entenderia se o último elemento estivesse perto do limite superior, mas isso obviamente […]

Leitura do GHC Core

Core é a linguagem intermediária do GHC. O Reading Core pode ajudá-lo a entender melhor o desempenho do seu programa. Alguém me pediu documentação ou tutoriais sobre a leitura do Core, mas não consegui encontrar muita coisa. Qual documentação está disponível para leitura do GHC Core? Aqui está o que eu encontrei até agora: Escreva […]

Quando é a memoização automática no GHC Haskell?

Eu não consigo entender porque o m1 é aparentemente memoizado enquanto o m2 não está no seguinte: m1 = ((filter odd [1..]) !!) m2 n = ((filter odd [1..]) !! n) m1 10000000 leva cerca de 1,5 segundos na primeira chamada, e uma fração disso nas chamadas subsequentes (presumivelmente, armazena em cache a lista), enquanto […]

Pegada de memory dos tipos de dados do Haskell

Como posso encontrar a quantidade real de memory necessária para armazenar um valor de algum tipo de dados no Haskell (principalmente com GHC)? É possível avaliá-lo em tempo de execução (por exemplo, no GHCi) ou é possível estimar os requisitos de memory de um tipo de dados compostos a partir de seus componentes? Em geral, […]

Bons exemplos de não um Functor / Functor / Applicative / Monad?

Ao explicar a alguém o que é um tipo de class X eu me esforço para encontrar bons exemplos de estruturas de dados que são exatamente X. Então, eu peço exemplos para: Um construtor de tipos que não é um Functor. Um construtor de tipos que é um Functor, mas não Applicative. Um construtor de […]

O Haskell tem otimização recursiva de cauda?

Eu descobri o comando “time” no unix hoje e pensei em usá-lo para verificar a diferença nos tempos de execução entre funções recursivas e recursivas normais em Haskell. Eu escrevi as seguintes funções: –tail recursive fac :: (Integral a) => a -> a fac x = fac’ x 1 where fac’ 1 y = y […]

Implantando Yesod para Heroku, não é possível construir estaticamente

Eu sou muito novo no Yesod e estou tendo problemas para criar o Yesod estaticamente para que possa implementá-lo no Heroku. Eu mudei o arquivo .cabal padrão para refletir a compilation estática if flag(production) cpp-options: -DPRODUCTION ghc-options: -Wall -threaded -O2 -static -optl-static else ghc-options: -Wall -threaded -O0 E já não constrói. Eu recebo um monte […]