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.

Reply via email to