module Main where
rev :: [a] -> [a]
rev (x:[]) = x
rev (x:xs) = (rev xs):x
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
main = do
print (rev lst)
Je travaille mon chemin à travers 99 Haskell Problems et essayer d'écrire une fonction pour inverser une liste (oui, je sais qu'il ya déjà un dans le prélude).Nouveau à Haskell, ne comprends pas pourquoi je reçois une erreur de type infini
Mon problème est que lorsque je tente de compiler le code ci-dessus (ou tapez simplement la définition de la fonction dans GHCi), je reçois:
Occurs check: cannot construct the infinite type: a = [a]
In the expression: rev :: [a] -> [a]
In the definition of `it': it = rev :: [a] -> [a]
Je ne suis pas tout à fait sûr où je vais mal avec mes types pour obtenir cette erreur. Je suppose que cela a quelque chose à voir avec la façon dont je fais correspondre les motifs, mais je ne sais pas pourquoi.
Vous pouvez seulement 'element: list' mais pas' list: element' (utilisez 'list ++ [élément]' à la place). Je pense qu'il y a déjà un doublon ... – kennytm
http://stackoverflow.com/questions/3861181/haskell-list-reversal-error – kennytm
Il est préférable d'écrire 'rev [] = []' et 'rev (x: xs) = rev xs ++ [x] 'car cela gère aussi la liste vide. – sdcvvc