Standard ML of New Jersey (32-bit) v110.99 [built: Thu Dec 24 11:01:10 2020] - - fun f1 (x, y) = x * y; val f1 = fn : int * int -> int - - f1(3,4); val it = 12 : int - f1(5,6); val it = 30 : int - f1 (5,6); val it = 30 : int - - - fun f2 (x, y) (u, v) = x*u + y*v; val f2 = fn : int * int -> int * int -> int - - f2 (1,2) (3,4); val it = 11 : int - - - fun f3 ((x,y), (u,v)) = x*u + y*v; val f3 = fn : (int * int) * (int * int) -> int - - f3((3,4), (5,6)); val it = 39 : int - f3 ((3,4), (5,6)); val it = 39 : int - - fun f4 (x, y, u, v) = x*u + y*v; val f4 = fn : int * int * int * int -> int - - f4 (3, 4, 5, 6); val it = 39 : int - f3 ((3, 4), (5, 6)); val it = 39 : int - - - fun f5 x y = x * y; val f5 = fn : int -> int -> int - - - f1 (3, 5); val it = 15 : int - f5 3 5; val it = 15 : int - - - val z = (3, 4); val z = (3,4) : int * int - f1 z; val it = 12 : int - f5 z; stdIn:36.1-36.5 Error: operator and operand do not agree [tycon mismatch] operator domain: int operand: int * int in expression: f5 z - - f1; val it = fn : int * int -> int - f5; val it = fn : int -> int -> int - - - f5 6 7; val it = 42 : int - f1 (3, 4); val it = 12 : int - f5(3,4); stdIn:47.1-47.8 Error: operator and operand do not agree [tycon mismatch] operator domain: int operand: 'Z[INT] * 'Y[INT] in expression: f5 (3,4) - - f5 (3,4); stdIn:48.1-48.9 Error: operator and operand do not agree [tycon mismatch] operator domain: int operand: 'Z[INT] * 'Y[INT] in expression: f5 (3,4) - - f5 4 6; val it = 24 : int - f1 (4, 6); val it = 24 : int - - - val c = (4, 5, 6, 7); val c = (4,5,6,7) : int * int * int * int - - f4 c; val it = 59 : int - - - f5 4 5; val it = 20 : int - val p = 4 5; stdIn:63.5-63.12 Error: operator is not a function [overload - bad instantiation] operator: 'Z[INT] in expression: 4 5 - - val x = 4; val x = 4 : int - val y = 5; val y = 5 : int - f5 x y; val it = 20 : int - - - - fun f1 x = (#1 x) * (#2 x); stdIn:75.1-75.27 Error: unresolved flex record (need to know the names of ALL the fields in this context) type: {1:'Y[OL(*)], 2:'Y[OL(*)]; 'Z} - - #1 (3,4); val it = 3 : int - #2 (3,4); val it = 4 : int - - #1 (3,4,5); val it = 3 : int - #2 (3,4,5); val it = 4 : int - #3 (3,4,5); val it = 5 : int - - - fun f1' (x : int*int*int*int) = (#1 x) * (#3 x); val f1' = fn : int * int * int * int -> int - f1' (1,2,3,4) = ; val it = 3 : int - f1' (4,3,2,1); val it = 8 : int - - - fun f1' x y z w = x * z; val f1' = fn : int -> 'a -> int -> 'b -> int - - - f 2 3 4 5; stdIn:96.1 Error: unbound variable or constructor: f - f1' 2 3 4 5; val it = 8 : int - - - - fun f2 (x, y) (u, v) = x*u + y*v; val f2 = fn : int * int -> int * int -> int - - - f2 (3,4) (5,6); val it = 39 : int - - val a = (3,4); val a = (3,4) : int * int - val b = (5,6); val b = (5,6) : int * int - f2 a b; val it = 39 : int - - - - fun f2 (x, y) (u, v) = x*u + y*v; val f2 = fn : int * int -> int * int -> int - - fun f2' (u:int*int) (v:int*int) = (#1 u * #1 v) + (#2 u * #2 v); val f2' = fn : int * int -> int * int -> int - - f2; val it = fn : int * int -> int * int -> int - f2'; val it = fn : int * int -> int * int -> int - - - - fun f (x, y) = x * y; val f = fn : int * int -> int - fun g x y = x * y; val g = fn : int -> int -> int - - f; val it = fn : int * int -> int - g; val it = fn : int -> int -> int - - - f (2,3); val it = 6 : int - g 2 3; val it = 6 : int - - - val gWith4 = g 4; val gWith4 = fn : int -> int - - gWith4 5; val it = 20 : int - gWith4 6; val it = 24 : int - - - - fun h (x, y) z (a,b,c) w = x :: y :: z :: a :: b :: c :: w; val h = fn : 'a * 'a -> 'a -> 'a * 'a * 'a -> 'a list -> 'a list - - - - fun h (x, y) z (a,b,c) w = (x :: y :: z, a :: b :: c :: w); val h = fn : 'a * 'a -> 'a list -> 'b * 'b * 'b -> 'b list -> 'a list * 'b list - - - h ("cat","dog") [] (3,4,5) [7,8,9]; val it = (["cat","dog"],[3,4,5,7,8,9]) : string list * int list - - - - - - val h2 = h ("cat","dog"); stdIn:172.5-172.25 Warning: type vars not generalized because of value restriction are instantiated to dummy types (X1,X2,...) val h2 = fn : string list -> ?.X1 * ?.X1 * ?.X1 -> ?.X1 list -> string list * ?.X1 list - - - h2 ["apples"] (2,3,4) []; stdIn:175.1-175.25 Error: operator and operand do not agree [overload - bad instantiation] operator domain: ?.X1 * ?.X1 * ?.X1 operand: 'Z[INT] * 'Y[INT] * 'X[INT] in expression: (h2 ("apples" :: nil)) (2,3,4) - - h2; val it = fn : string list -> ?.X1 * ?.X1 * ?.X1 -> ?.X1 list -> string list * ?.X1 list -