Functional programming 如何使用映射/定义在OCaml中实际上是映射的类型?

Functional programming 如何使用映射/定义在OCaml中实际上是映射的类型?,functional-programming,ocaml,Functional Programming,Ocaml,我将在Ocaml中练习使用Map 我发现Map的用法与List、Array等有很大不同 我知道它正在应用我还没有学会的函子。但这很好 这是我的IntMap module IntMap=Map.Make(结构类型t=int let compare=compare end) 所以,现在我可以使用IntMap来add通过IntMap.add x y map等等,对吗 我有几个问题: 如何控制映射中的值的类型 如果我想要我的IntMap的别名类型,我应该怎么做?我可以做type'a my_type=

我将在Ocaml中练习使用
Map

我发现
Map
的用法与
List
Array
等有很大不同

我知道它正在应用我还没有学会的
函子。但这很好


这是我的
IntMap

module IntMap=Map.Make(结构类型t=int let compare=compare end)

所以,现在我可以使用
IntMap
add
通过
IntMap.add x y map
等等,对吗


我有几个问题:

  • 如何控制
    映射
    中的
    的类型
  • 如果我想要我的
    IntMap
    的别名类型,我应该怎么做?我可以做
    type'a my_type='a列表
    ,但是如何做
    map
  • 我发现
    IntMap
    类似于
    List
    ,它们实际上都是
    模块
    。但是
    列表
    有一种
    列表
    ,那么
    地图
  • 问:

    如何控制映射中的值类型

    不需要,
    'a IntMap.t
    是一种参数化类型,包含
    'a
    类型的值。因此,单个模块
    IntMap
    可用于从int映射到int、从int映射到bools、从int映射到函数。。。(当然,单个映射值只能包含单个类型的绑定)。此外,没有理由试图限制
    IntMap.empty的类型,正如没有理由强制
    []
    为列表以外的任何类型一样

    问:

    如果我想要IntMap的别名类型,我应该怎么做?我可以在列表中键入'a my_type='但如何为map做呢

    这样:

    type 'a imap = 'a IntMap.t
    
    问:

    我发现IntMap类似于List,它们实际上都是模块。但是列表有一种列表类型,那么地图呢


    这是
    Intmap.t

    我在文档中看到,
    type+'a是从type key到type'a的映射类型
    ,里面的
    +
    是什么意思?@JacksonTale看到这个问题: