我最近开始学习Haskell,我遇到了字典问题。我使用一个键从字典中获取整数,并且GHCi在我使用字符串的第一个元素作为字典的键的行上打印错误“无法匹配字符Char与[Char]”。这是代码:
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
答案 0 :(得分:2)
在Haskell中,String
是[Char]
的同义词。
c
中的romanToInt
类型为String
,即[Char]
。
head
的类型为[a] -> a
,因此head c
的类型为Char
。
(!)
的类型为Ord k => Map k a -> k -> a
。在这种情况下,mapRomantoInt
的类型为Map String Int
,因此相关的k
必须为String
。
但是,函数调用mapRomantoInt ! head c
会尝试传递Char
而不是[Char]
(String
)。
OP中的代码还存在其他问题,但请先尝试修复编译错误。