• 0 Posts
  • 2 Comments
Joined 27 days ago
cake
Cake day: April 13th, 2025

help-circle
  • Isn’t match already such a unified expression? Especially once you extend matches with guards, it seems to me like this is a solved problem. E.g.,

    if x == 1.0 then "a" else "x"
    

    is

    match x with | 1.0 -> "a" | _ -> "b"
    

    and

    if x ==
      1.0 then "a"
      2.0 then "b"
          else "z"
    

    is (and IMO reads much clearer this way):

    match x with
    | 1.0 -> "a"
    | 2.0 -> "b"
    | _ -> "z"
    

    and

    if xs
      .isEmpty then "e"
      .contains(0,0) then "n"
      else "z"
    

    is

    match () with
    | _ when x.isEmpty -> "e"
    | _ when x.contains(0,0) then "n"
    | _ -> "z"
    

    and

    if person
      .age < 18                 then 18
      is Person("Alice", _)     then person.age
      is Person("Bob", let age) then age
                                else -1
    

    is

    match person with
    | _ when person.age < 10 -> 18
    | Person("Alice", _) -> person.age
    | Person("bob", age) -> age
    | _ -> -1
    

    .

    Finally,

    if person is Person("Alice", let age) then age else -1
    

    Would be the simple

    match person with
    | Person("Alice", age) -> age
    | _ -> -1
    

    Seems to me this reads more clear in general and has less magic. Plus, it’s already implemented in a bunch of languages.