gpt4 book ai didi

ocaml - OCaml 中作为模块类型的存在类型

转载 作者:行者123 更新时间:2023-12-03 23:00:59 24 4
gpt4 key购买 nike

给定一个类型

type 'a ty
和一个模块类型
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)
我想定义一个函数(虽然这不进行类型检查)
let ofTY (m : (module TY)) : m.a ty = ???
预期的效果是每当 m : (module TY)然后 ofTY m : m.a 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
x由类型 a 存在量化,而且没有办法去掉这种存在量化,最多可以用不同的方式来表达。

关于ocaml - OCaml 中作为模块类型的存在类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65790567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com