第7回
課題7
載せていいのか微妙な気もしますが、EXISTモジュールの定義は下の通り。
1 module EXIST: functor (T : sig type 'a t end) ->
2 sig
3 type t
4 type 'b u = {f : 'a. 'a T.t -> 'b}
5 val pack : 'a T.t -> t
6 val unpack : t -> 'b u -> 'b
7 end =
8 functor (T : sig type 'a t end) ->
9 struct
10 type 'b u = {f: 'a. 'a T.t -> 'b}
11 type t = {t: 'false_t. 'false_t u -> 'false_t}
12 let rec pack (x: 'a T.t) = {t = fun x1 -> x1.f x}
13 let rec unpack x f = x.t f
14 end;;