在haskell中将数字字符串转换为Int的列表

i1icjdpr  于 2023-04-12  发布在  其他
关注(0)|答案(4)|浏览(173)

我正在尝试将一个字符串(数字)转换为单个数字。有多种方法可以解决这个问题,其中一种是map digitToInt "1234"
我尝试了类似的方法,但不是使用digitToInt,而是尝试使用read::Char->Int函数。然而,当我使用上述函数时,我得到了编译错误,如:

map (read::Char->Int) ['1','2']

我不知道这里出了什么问题,我试图Map一个函数,它将CharMap到一个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)’
fnvucqvd

fnvucqvd1#

read :: Read a => String -> astring 转换为Read able元素。因此,如果您想从字符串中读取数字,可以用途:

map (read . pure :: Char -> Int) ['1','2']

但如果字符是数字,使用**digitToInt :: Char -> Int**函数可能更好:

import Data.Char(digitToInt)

map digitToInt ['1', '2']
xoefb8l8

xoefb8l82#

问题是read :: Read a => String -> a。所以read应该应用于String,而不是Char。请尝试以下操作:

map (read :: String -> Int) ["1", "2"]
 -- or
 map read ["1", "2"] :: [Int] -- same but clearer?
jexiocij

jexiocij3#

你可以尝试这样做map (\x -> read (x:[]) :: Int) "12"这应该可以工作,如果你有任何疑问,只需搜索lambda表达式。

z31licg0

z31licg04#

你可以尝试这样的东西:

toInt x = read x :: Int
map (toInt . (:"")) ['1', '2']

相关问题