Je suis nouveau sur Haskell et face à un "ne peut pas construire infini" type d'erreur que je ne peut pas donner un sens.
En fait, au-delà, je n'ai pas été en mesure de trouver une bonne explication de ce qu'est cette erreur signifie même, donc si vous pouviez aller au-delà de ma question de base et expliquer le "infini" type d'erreur, je l'apprécierais vraiment.
Voici le code:
intersperse :: a -> [[a]] -> [a]
-- intersperse '*' ["foo","bar","baz","quux"]
-- should produce the following:
-- "foo*bar*baz*quux"
-- intersperse -99 [ [1,2,3],[4,5,6],[7,8,9]]
-- should produce the following:
-- [1,2,3,-99,4,5,6,-99,7,8,9]
intersperse _ [] = []
intersperse _ [x] = x
intersperse s (x:y:xs) = x:s:y:intersperse s xs
Et voici l'erreur en essayant de le charger dans l'interpréteur:
Prélude> :charge ./chapitre.3.fin.réel.monde.haskell.des exercices.hs [1 1] Compilation Principal ( chapitre.3.fin.réel.monde.haskell.des exercices.hs, interprété )
chapitre.3.fin.réel.monde.haskell.des exercices.hs:147:0: Se vérifier: ne peut pas construire l'infini type: a = [a] Lors de la généralisation du type(s) pour `imposer' A échoué, les modules chargés: aucun.
Merci.
EDIT: Merci pour les réponses, j'ai corrigé le code et j'ai aussi une ligne directrice générale pour les relations avec les "infini" type d'erreur en Haskell:
Code corrigé
intersperse _ [] = []
intersperse _ [x] = x
intersperse s (x:xs) = x ++ s:intersperse s xs
Quel était le problème:
Mon type de signature états que le deuxième paramètre de ponctuer est une liste de listes. Donc, quand j'modèle mis en correspondance avec "s (x:y:xs)", x et y sont devenus des listes. Et pourtant j'ai été le traitement de x et y comme des éléments, et non pas des listes.
La ligne directrice pour les relations avec les "infini" type d'erreur:
La plupart du temps, lorsque vous obtenez cette erreur, vous avez oublié les types des différentes variables que vous avez affaire, et vous avez tenté d'utiliser une variable comme si elle était d'un autre type que ce qu'il est. Regardez attentivement à ce type de tout ce qui est rapport à la façon dont vous l'utilisez, et il s'agit généralement de découvrir le problème.