Found it! 

step : Int -> Parser Step
step i =
    inContext ("step with indent " ++ (toString i)) <|
        delayedCommitMap Step (oneStep i) <|
            oneOf
                [ repeat oneOrMore (lazy (\_ -> (step (i + 2))))
                , succeed [] 
                ]


oneStep i  =
    inContext ("Onestep with indent " ++ (toString i)) <|
      succeed identity
            |. (indent i)
            |. keyword ">>"
            |. spaces
            |= string
            |. eol


Op donderdag 20 april 2017 18:34:19 UTC+2 schreef Eelco Hoekema:
>
>
> I am trying to parse a recursive structure using 
> http://package.elm-lang.org/packages/elm-tools/parser/latest . 
>
> Here is an try: https://ellie-app.com/WwGfQGWRHfa1/9 
>
> For example, I'd like to parse something like this:
> >> "ab"
>   >> "cd"
>     >> "ef"
>   >> "gh"
>     >> "ij"
>       >> "kl"
>       >> "mn"
>
> into a data structure like this:
> type Step
>     = Step String (List Step)
>
> The parser basically comes down to this:
> step : Int -> Parser Step
> step i =
>     inContext ("step with indent " ++ (toString i)) <|
>         succeed
>             Step
>             |. (indent i)
>             |. keyword ">>"
>             |. spaces
>             |= string
>             |. eol
>             |= repeat zeroOrMore (lazy (\_ -> (step (i + 2))))
>
>
> This works fine for 
> >> "ab"
>   >> "cd"
>     >> "ef"
>       >> "gh"
>         >> "ij"
>
> But not for the example given above, or something like
> >> "ab"
>   >> "cd"
>     >> "ef"
>     >> "gh"
>       >> "ij"
>
>
> The error is a *BadRepeat*, of which the documentation says you get it 
> for parsers that use a *repeat zeroOrMore* and always succeed, which is 
> clearly the case with the parser above. The thing, is, i don't know how to 
> create a parser that fails. I have tried avoiding the zeroOrMore, and use a 
> oneOrMore instead: 
>             |= oneOf 
>                 [ repeat oneOrMore (lazy (\_ -> (step (i + 2))))
>                 , succeed []
>                 ]
> But fundamentally, that has the same problem, i think.
>
> Since the library is quite new, there is not that much to find on the 
> strategies to be used. Can anyone point me in a direction i could try? I am 
> stuck. (Can't get it to work with elm-community/parser-combinators either).
>
> thanks,
>
> eelco
>
>
> Extra question: the elm-tools/parser library comes with indent tooling, 
> but i can't figure out how to get it to work. Any pointers there would also 
> be highly appreciated.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to