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 [email protected].
For more options, visit https://groups.google.com/d/optout.