Haskell: Qual é o tipo dessa função?
Pergunta
mifun s = foldr op 0 s
where op x r = head x + r
Existe uma maneira de fazer o GHCI me dizer?
Solução
tentar :t mifun
(abreviatura de :type mifun
)
que dá
*Main> :t mifun
mifun :: (Num b) => [[b]] -> b
Então, para um b
uma instância de num
, mifun
leva uma lista de listas de b
e produz um único b
(que, neste caso, é a soma dos primeiros elementos das listas).
Outras dicas
Isso não é realmente uma resposta, mas eu precisava da formatação.
NB: mifun
é ⊥ se alguma das listas contidas estiver vazia. Por exemplo:
> mifun [[3], [5, 8], [], [1, 2, 3]]
*** Exception: Prelude.head: empty list
Se você deseja que o resultado do exemplo acima seja 9 (tratando uma lista vazia como não contribuindo para a soma), você deve definir o OP como uma das seguintes maneiras:
mifun s = foldr op 0 s
where op [] r = r
op (x:_) r = x + r
mifun s = foldr op 0 s
where op x r = (if null x then 0 else head x) + r
mifun s = foldr op 0 s
where op x r = sum (take 1 x) + r
Eu provavelmente preferiria o primeiro.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow