如何使用Map /定义一个实际上是OCaml中Map的类型?

时间:2013-04-04 11:34:41

标签: functional-programming ocaml

我将在Ocaml中使用Map进行练习。

我发现Map的使用情况与ListArray等完全不同。

我知道它正在应用我尚未学习的functor。但没关系。


这是我的IntMap

module IntMap = Map.Make(struct type t = int let compare = compare end)

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


我有几个问题:

  1. 如何控制valuemap的类型?
  2. 如果我想要IntMap的别名类型,我该怎么办?我可以type 'a my_type = 'a list,但map怎么做?
  3. 我发现IntMapList类似,而且它们都是modules。但List的类型为listmap
  4. 怎么样?

1 个答案:

答案 0 :(得分:3)

问:

  

如何控制地图中的值类型?

您没有(需要),'a IntMap.t是一个参数化类型,其中包含'a类型的值。因此,单个模块IntMap可用于从int到int,从int到bool,int到函数的映射......(当然,单个映射值只能包含单个类型的绑定)。此外,没有理由试图约束IntMap.empty的类型,就像没有理由强迫[]'a list以外的任何类型。

问:

  

如果我想为我的IntMap使用别名类型,我该怎么办?我可以输入'a my_type ='列表,但是如何为地图输入?

这样:

type 'a imap = 'a IntMap.t

问:

  

我发现IntMap就像List一样,它们都是模块。但是List有一种列表,那么地图呢?

这是Intmap.t