Pregunta

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

¿Hay alguna manera de hacer que GHCI me diga?

¿Fue útil?

Solución

probar :t mifun (corto para :type mifun)

lo que da

*Main> :t mifun
mifun :: (Num b) => [[b]] -> b

Entonces, para un b una instancia de num, mifun toma una lista de listas de b y emite un solo b (que en este caso es la suma de los primeros elementos de las listas).

Otros consejos

Esto no es realmente una respuesta, pero necesitaba el formato.

NÓTESE BIEN: mifun es ⊥ si alguna de las listas contenidas está vacía. Por ejemplo:

> mifun [[3], [5, 8], [], [1, 2, 3]]
*** Exception: Prelude.head: empty list

Si desea que el resultado del ejemplo anterior sea 9 (tratar una lista vacía como no contribuir a la suma), entonces debe definir OP como una de las siguientes formas:

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 

Probablemente preferiría el primero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top