Haskell: ¿Cuál es el tipo de esta función?
Pregunta
mifun s = foldr op 0 s
where op x r = head x + r
¿Hay alguna manera de hacer que GHCI me diga?
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