我正在尝试将(数字)字符串转换为单个数字。解决此问题的方法有多种,一种是map digitToInt "1234"
我正在尝试类似的方法,但是我没有使用digitToInt
函数,而是试图使用read::Char->Int
函数。但是,当我使用上面的方法时,出现编译错误,如:
map (read::Char->Int) ['1','2']
给我以下错误。我不确定这里出什么问题,我正在尝试映射一个将Char放在Char列表上的函数,我缺少什么?
请不要告诉我其他方法,因为我了解还有其他几种方法可以执行此操作。只想了解这里发生了什么。
Couldn't match type ‘Char’ with ‘[Char]’
Expected type: Char -> Int
Actual type: String -> Int
• In the first argument of ‘map’, namely ‘(read :: Char -> Int)’
答案 0 :(得分:4)
问题是read :: Read a => String -> a
。因此,read
应该应用于String
,而不是Char
。尝试以下方法:
map (read :: String -> Int) ["1", "2"]
-- or
map read ["1", "2"] :: [Int] -- same but clearer?
答案 1 :(得分:4)
read :: Read a => String -> a
将 string 转换为Read
元素。因此,如果您想从字符串中读取数字,则可以使用:
map (read . pure :: Char -> Int) ['1','2']
但是如果字符是数字,则最好使用digitToInt :: Char -> Int
函数:
import Data.Char(digitToInt)
map digitToInt ['1', '2']
答案 2 :(得分:1)
您可以尝试以这种方式进行map (\x -> read (x:[]) :: Int) "12"
如果您对此有任何疑问,这应该可以工作,只需搜索lambda表达式即可。
答案 3 :(得分:1)
您可以尝试类似的操作:
toInt x = read x :: Int
map (toInt . (:"")) ['1', '2']