


At this point, a pair of matching code examples, one in SML, one in Mythryl, should give good intuition. First the SML version:
signature My_Api = sig
datatype Color = RED | GREEN | BLUE
datatype Point = TWO_D of (real * real) | THREE_D of (real * real * realt)
val say_hello: unit -> unit
val dist: ((real * real) * (real * real)) -> real
val sum: int list -> int
end
structure my_package :> My_Api = struct
datatype Color = RED | GREEN | BLUE
datatype Point = TWO_D of (real * real) | THREE_D of (real * real * real)
fun say_hello () = print "Hello!\n"
fun dist ((x0,y0), (x1,y1))
=
let val delta_x = x1 - x0
val delta_y = y1 - y0
in
delta_x * delta_x
+
delta_y * delta_y
end
fun sum ints
=
let fun sum' ([], result) => result
| sum' (i :: is, result) => sum' (is, i + result)
in
sum' (ints, 0)
end
end
Now the Mythryl version:
api My_Api {
Color = RED | GREEN | BLUE;
Point = TWO_D (Float, Float) | THREE_D (Float, Float, Float);
say_hello: Void -> Void;
mult: (Int, Int) -> Int;
sum: ((Float,Float), (Float,Float)) -> Float;
};
package my_package: My_Api {
Color = RED | GREEN | BLUE;
Point = TWO_D (Float, Float) | THREE_D (Float, Float, Float);
fun say_hello () = print "Hello!\n";
fun dist ((x0,y0), (x1,y1))
=
{ delta_x = x1 - x0;
delta_y = y1 - y0;
delta_x * delta_x
+
delta_y * delta_y;
};
fun sum ints
=
sum' (ints, 0)
where
fun sum' ([], result) => result;
sum' (i ! is, result) => sum' (is, i + result);
end;
end;
};


