在Haskell中将Char转换为Int

时间:2018-11-07 09:04:35

标签: haskell

我正在尝试将(数字)字符串转换为单个数字。解决此问题的方法有多种,一种是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)’

4 个答案:

答案 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']