Андреас Россберг представил два полных примера.
Вот вариант, в котором вместо аргумента функции используется сопоставление с образцом:
fun curry f x y = f (x, y)
fun all_except_option (s, []) = NONE
| all_except_option (s, t::ts) =
if s = t
then SOME ts
else Option.map (curry op:: t) (all_except_option (s, ts))
Где curry op:: t
- функция, которая берет список и помещает перед ним t
:
- curry op:: "x" ["y", "z"];
> val it = ["x", "y", "z"] : string list
и эквивалентно fn ss' => t::ss'
.