minus-squareconsiderealization@lemmy.catoProgramming Languages@programming.dev•Unified Condition Expressionslinkfedilinkarrow-up1·9 days agoIsn’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. linkfedilink
minus-squareconsiderealization@lemmy.catoTechnology@lemmy.world•A Toronto company is deliberately spreading hyperpartisan lies on Facebook. It owns a page called "Canada Proud" and has bought more than $250,000 in ads targeting voterslinkfedilinkEnglisharrow-up10·16 days agoHow legal is this kind of activity? Do we not have regulations against CPAC-like activity? linkfedilink
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.