gpt4 book ai didi

module - 模块和存在的区别

转载 作者:行者123 更新时间:2023-12-04 14:26:54 25 4
gpt4 key购买 nike

众所周知,OCaml 模块是“只是”存在类型。之间有某种对等

module X = struct type t val x : t end


data 'a spec = { x : 'a }
data x = X : 'a spec

这并不完全正确。

但正如我刚刚证明的那样,OCaml 既有模块又有存在类型。我的问题是:
  • 它们有何不同?
  • 有什么可以在一个中实现但在另一个中不能实现的吗?
  • 你什么时候会使用一个而不是另一个(特别是比较一流的模块和存在类型)?
  • 最佳答案

    它是具有存在类型的具体抽象类型。我认为,没有抽象类型的模块可以不用存在论来解释。

    模块具有抽象类型以外的特性:它们充当 namespace ,它们是结构化类型的,它们支持像 include 这样的操作和 module type of ,它们允许私有(private)类型等。

    一个显着的区别是仿函数允许对任何(固定)arity 的类型进行范围,这对于类型变量是不可能的,因为 OCaml 缺少更高种类的类型:

    module type M = sig
    type 'a t
    val x : 'a t
    end

    我不太确定如何回答你的最后一个问题。模块和存在主义在实践中已经足够不同,以至于何时用一个替换另一个的问题还没有出现。

    关于module - 模块和存在的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29023783/

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