无法将类型Char与[Char],Haskell

时间:2017-10-09 08:04:21

标签: haskell

我最近开始学习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

1 个答案:

答案 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中的代码还存在其他问题,但请先尝试修复编译错误。