第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;;


Categoryノート