J'ai récemment commencé à apprendre Haskell et j'ai rencontré un problème avec les dictionnaires. J'utilise une clé pour obtenir le nombre entier du dictionnaire, et GHCi imprime une erreur "Impossible de faire correspondre le type Char avec [Char]" sur la ligne où j'utilise un premier élément de la chaîne comme clé pour un dictionnaire. Voici le code:Impossible de trouver le type Char avec [Char], Haskell
import Data.Map
mapRomantoInt :: Map String Int
mapRomantoInt = fromList[("I",1),("V",5),("IX",9),("X",10),("L",50),("C",100),("D",500),("M",1000)]
romanToInt :: String -> Int
romanToInt _ = 0
romanToInt c = if length c == 1 then mapRomantoInt ! head c else
let first = mapRomantoInt ! head c
second = mapRomantoInt ! (c !! 1)
others = romanToInt(tail c)
in if first < second then others - first else others + first
'head c' est un caractère. Utilisez '[head c ]' à la place. Pareil avec 'c !! 1': devrait être '[c !! 1] '. –
Notez que ce style de programmation est à la fois inefficace ('longueur' scanne toute la liste), dangereux (fonctions comme 'head, tail, !!' va planter le programme quand la liste est trop courte), et incorrect (' romanToInt', comme écrit, renvoie toujours '0'). Je vous recommande fortement d'éviter ce style non-idiomatique et d'essayer d'exploiter la correspondance de motifs à la place, ce qui est plus sûr et plus idiomatique. – chi