Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 从列表中读取整数_Haskell_Functional Programming - Fatal编程技术网

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

我在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]
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
,如果您愿意的话