(** CS440, HW6 **) exception Unimplemented (*>* Problem 2.2 *>*) let compose (f: 'a -> ('b -> 'k) -> 'k) (g: 'b -> ('c -> 'k) -> 'k) : 'a -> ('c -> 'k) -> 'k = fun (a: 'a) (k: 'c -> 'k) -> raise Unimplemented ;; assert (compose (fun a k -> k (a + 1)) (fun b k -> k (b * 2)) 1 (fun x -> x) = 4);; (*>* Problem 2.3 *>*) let rec prod (l: int list) (k: int -> 'k) : 'k = raise Unimplemented ;; assert (prod [1; 2; 3] (fun x -> x) = 6);; assert (prod [1; 0; 2] (fun x -> x) = 0);; assert (prod [] (fun x -> x) = 1);;