Ir para o conteúdo
AJBM

Questões Sobre tipos

Mensagens Recomendadas

AJBM

Boas alguem me pode explicar tipos por exemplo

funcao n = take n [1..]

porque que o tipo fica assim

funcao :: (Num a, Enum a) => Int -> [a]

a parte do Int [a] eu percebo nao percebo e esta parte (Num a,Enum a)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Polmax

o take tem o tipo take::Int->[a]->[a]

O primeiro argumento é a quantidade de elementos que ele vai buscar a uma lista e forma uma nova lista com esses novos elementos

Sendo esta lista enumerada por ordem crescente, essa enumeraçao e todos os metodos referentes à mesma estão definidos para elementos da classe Num se não me engano e estao dentro da classe Enum

por isso ao invocares a função invocas as classes , porque tas a usar metodos dessas classes

.

.

v

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Isso tem a ver com o facto da lista estar representada por compreensão, porque o tipo da função take é:

:t take
take :: Int -> [a] -> [a]

Ou seja, a função take não impõe nada ao tipo da lista passada por parâmetro. Já se testares qual o tipo da lista [1..], verificas que:

:t [1..]
[1..] :: (Num t, Enum t) => [t]

O facto do tipo dos elementos da lista ter de ser um Enum é facilmente explicável, deve-se ao facto de que a função enumFrom, da classe Enum, é usada para criar a lista representada pela lista [1..] (que está em compreensão), como podes ler na documentação:

class  Enum a   where

-- | Used in Haskell's translation of @[n..]@.
    enumFrom            :: a -> [a]

http://hackage.haskell.org/packages/archive/base/latest/doc/html/src/GHC-Enum.html

O Num está lá porque se trata de uma lista de inteiros. Se fosse uma lista de valores decimais, estaria Fractional:

:t [1.0..]
[1.0..] :: (Fractional t, Enum t) => [t]

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.