I'm working on a program that attempts to parse a String in several
different ways, and uses the first one that matches. Each parse function
returns a Result. At first I had nested case statements:
let result =
case parse1 input of
Err _ ->
case parse2 input of
Err _ ->
parse3 input
res ->
res
res ->
res
(additional parse functions will be added later, deepening this)
Then I wrote an orThen function that's like the complement of andThen to
simplify it:
orThen : (a -> Result x b) -> a -> Result x b -> Result x b
orThen f input res =
case res of
Ok _ -> res
_ -> f input
let result =
parse1 input
|> orThen parse2 input
|> orThen parse3 input
I put an example and a couple alternative variations (though I like this
one best) on Elm Fiddle:
http://www.elmfiddle.io/view/cis4ls2gm0003rhtvo7mh49m5
An analogous function could be defined for Maybe. Maybe's oneOf could be
used for this purpose too, though that requires computing all Maybe values
first instead of being lazy.
Perhaps orThen would be a useful addition to Result.Extra / Maybe.Extra?
--
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.