Haskell: Quel est le type de cette fonction?
Question
mifun s = foldr op 0 s
where op x r = head x + r
Y at-il un moyen de faire ghci me dire?
La solution
essayer :t mifun
(abréviation de :type mifun
)
qui donne
*Main> :t mifun
mifun :: (Num b) => [[b]] -> b
Ainsi, pour un b
une instance de num
, mifun
prend une liste de listes de b
et délivre en sortie un seul b
(qui dans ce cas est la somme des premiers éléments de la liste).
Autres conseils
Ce n'est pas vraiment une réponse, mais je nécessaire la mise en forme.
N.B.:. mifun
est ⊥ si l'une des listes contenues est vide. Par exemple:
> mifun [[3], [5, 8], [], [1, 2, 3]]
*** Exception: Prelude.head: empty list
Si vous voulez que le résultat de l'exemple ci-dessus pour être 9 (le traitement d'une liste vide comme ne contribuant pas à la somme), alors vous devez définir op comme l'une des façons suivantes:
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
Je préféreriez probablement le premier.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow