Pergunta

mifun s = foldr op 0 s
          where op x r = head x + r 

Existe uma maneira de fazer o GHCI me dizer?

Foi útil?

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
scroll top