OCaml中作为模块类型的存在类型
给定类型OCaml中作为模块类型的存在类型,ocaml,Ocaml,给定类型 type 'a ty 和一个模块类型 module type TY = (sig type a val x : a ty end) module type TY = sig type a val x: a ty end 我可以定义 let toTY (type b) (x' : b ty) : (module TY) = (module struct type a = b let x = x' end) 我想定义一个函数(尽管它不进行类型检查) 其预期效果
type 'a ty
和一个模块类型
module type TY = (sig type a val x : a ty end)
module type TY = sig
type a
val x: a ty
end
我可以定义
let toTY (type b) (x' : b ty) : (module TY) =
(module struct
type a = b
let x = x'
end)
我想定义一个函数(尽管它不进行类型检查)
其预期效果是,无论何时m:(模块TY)
试图将其定义为
let ofTY (type b) (m : (module TY with type a = b)) : b ty = ...
没有预期的效果
定义ofTY的适当方法是什么?OCaml不是依赖类型的,因此类型不能依赖于值。换句话说,由于
m
是一个值,m.a
不能是一个类型
另一种查看问题的方法是在模块类型中
module type TY = (sig type a val x : a ty end)
module type TY = sig
type a
val x: a ty
end
值x
是按类型a
进行存在量化的,没有办法删除这种存在量化,最多可以用不同的方式表示