


Mythryl function syntax supports implicit case expressions, allowing a function to be expressed as a sequence of pattern => expression pairs without need to write an explicit case.
Thus, the script
linux$ cat my-script
#!/usr/bin/mythryl
fun from_roman string
=
case string
"I" => 1;
"II" => 2;
"III" => 3;
"IV" => 4;
"V" => 5;
"VI" => 6;
"VII" => 7;
"VIII" => 8;
"IX" => 9;
_ => raise exception FAIL "Unsupported Roman number";
esac;
printf "from_roman III = %d\n" (from_roman "III");
linux$ ./my-script
from_roman III = 3
may be written more compactly as
linux$ cat my-script
#!/usr/bin/mythryl
fun from_roman "I" => 1;
from_roman "II" => 2;
from_roman "III" => 3;
from_roman "IV" => 4;
from_roman "V" => 5;
from_roman "VI" => 6;
from_roman "VII" => 7;
from_roman "VIII" => 8;
from_roman "IX" => 9;
from_roman _ => raise exception FAIL "Unsupported Roman number";
end;
printf "from_roman III = %d\n" (from_roman "III");
linux$ ./my-script
from_roman III = 3
This facility is particularly useful when writing short recursive functions with separate terminal and recursion cases:
linux$ cat my-script
#!/usr/bin/mythryl
r = [ 1, 2, 3 ];
fun sum_list ([], sum) => sum;
sum_list (i ! rest, sum) => sum_list (rest, sum + i);
end;
printf "%d-element list summing to %d.\n" (list::length r) (sum_list (r, 0));
linux$ ./my-script
3-element list summing to 6.


