在Haskell中从[[Char]]转换为自己的数据类型

时间:2013-04-19 20:30:26

标签: list haskell type-conversion

scanl (\exp y -> scanl (\x -> if (isLetter x) then update exp (Literal x) "" else 
                    if x=='+' then update exp Epsilon "+" else
                    if x=='*' then update exp Epsilon "*" else
                    update exp Epsilon "|") y) Epsilon q

我的数据类型是:

data Reg = Epsilon | Literal Char | Or Reg Reg |  Then Reg Reg |  Star Reg  deriving Eq

update:: Reg -> Reg -> [Char] -> Reg 
update a b "" = (a `Then` b)
update a b "|"= (a `Or` b) 
update a b "*" = (Star a) 
update a b "+" = (plus a)
update a b "?" = (opt a)  

我正在尝试使用上述函数将此类[“a |”,“bc”]之类的内容转换为(然后a(或b c)),我无法使用ParSec。

1 个答案:

答案 0 :(得分:1)

请不要“手动”这样做,它最终会一团糟。而是学习如何使用解析器。 ParSec对于较小的示例会很好,并且您可以获得更加可读和灵活的代码。