Jon*_*rdy 3 parsing haskell parsec
我有两个解析器用于不同类型的术语.
a :: Parser A
b :: Parser B
Run Code Online (Sandbox Code Playgroud)
我有一个表示这些术语序列的数据类型.
data C = C [A] [B]
Run Code Online (Sandbox Code Playgroud)
如果我的输入是一系列混合术语,那么c :: Parser C将As与Bs 分开,保留其顺序的好方法是什么?例如,给定以下定义:
data A = A Char
data B = B Char
a = A <$> oneOf "Aa"
b = B <$> oneOf "Bb"
Run Code Online (Sandbox Code Playgroud)
"abAbBBA"会解析序列aAA和bbBB.我有一种感觉,我需要使用StateT,但我不确定具体细节,只需要朝着正确的方向努力.
一个简单的解决方案是首先将其解析为一个列表Either A B然后用于partitionEithers将其拆分为两个列表然后应用C构造函数.
c :: Parser C
c = uncurry C . partitionEithers <$> many ((Left <$> a) <|> (Right <$> b))
Run Code Online (Sandbox Code Playgroud)