Imp*_*ive 14 parsing haskell scala
我正在尝试读取包含表单的键/值对的文件:
#A comment
a=foo
b=bar
c=baz
Some other stuff
Run Code Online (Sandbox Code Playgroud)
如所建议的那样,有各种其他线路.这想要进入我可以从中查找键的地图.
我最初的方法是读取行并在'='字符上拆分得到一个[[String]].在Scala中,我会使用collect,它接受一个部分函数(在这种情况下类似于\x -> case x of a :: b :: _ -> (a,b)并在它定义的地方应用它,丢弃函数未定义的值.Haskell有任何等价的吗?
如果不这样做,那么在Haskell中如何做到这一点,无论是沿着我的方向还是使用更好的方法?
Don*_*art 14
通常,这是通过Maybe类型和catMaybes:
catMaybes :: [Maybe a] -> [a]
Run Code Online (Sandbox Code Playgroud)
所以如果你的解析函数有类型:
parse :: String -> Maybe (a,b)
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过将输入字符串解析为行来构建映射,验证每一行并仅返回定义的值:
Map.fromList . catMaybes . map parse . lines $ s
Run Code Online (Sandbox Code Playgroud)
s你的输入字符串在哪里.