Haskell 从列表中读取整数
我在Haskell面临以下问题: 我想解析这样的列表:Haskell 从列表中读取整数,haskell,functional-programming,Haskell,Functional Programming,我在Haskell面临以下问题: 我想解析这样的列表: [“1”、“2”、“3”]变成一个可能[Int]。我能做的是,使用Text.Read中的readMaybe,通过以下方式获得[Maybe Int]Int: parseList :: [String] -> [Maybe Int] parseList l = map readMaybe l :: [Maybe Int] 我可以这样做: parseListMaybe :: [String] -> Maybe [Int] parse
[“1”、“2”、“3”]
变成一个可能[Int]
。我能做的是,使用Text.Read
中的readMaybe
,通过以下方式获得[Maybe Int]
Int:
parseList :: [String] -> [Maybe Int]
parseList l = map readMaybe l :: [Maybe Int]
我可以这样做:
parseListMaybe :: [String] -> Maybe [Int]
parseListMaybe l = if (any isNothing parsed) then Nothing
else (Just $ catMaybes parsed)
where parsed = parseList l
但在我看来,这并不是解决这个问题的最优雅、最精确的方法。如果您能从Control.Monad中得到一些关于此使用的提示,我将不胜感激:
\> import Control.Monad (sequence)
\> import Text.Read (readMaybe)
\> sequence (readMaybe <$> ["1", "2", "3"]) :: Maybe [Int]
Just [1,2,3]
\> sequence (readMaybe <$> ["1", "xyz", "3"]) :: Maybe [Int]
Nothing
导入控制.Monad(序列)
\>导入文本。读取(readMaybe)
\>顺序(readMaybe[“1”、“2”、“3”])::Maybe[Int]
只是[1,2,3]
\>顺序(readMaybe[“1”,“xyz”,“3”])::Maybe[Int]
没有什么
parseListMaybe=sequence。map readMaybe
。或者更短一些-遍历readMaybe
或者mapM readMaybe
,如果您愿意的话