Module 如何在OCaml中重新导出类型?
假设我有一个模块a,其定义如下:Module 如何在OCaml中重新导出类型?,module,ocaml,Module,Ocaml,假设我有一个模块a,其定义如下: type foo = Bar | Baz a模块B: 以及模块C: 如何更改模块B以重新导出类型foo,从而不必在模块C中打开模块A 谢谢。我现在只学习了3个月的OCaml,所以我的答案可能不是最好的。但根据我开始读的那本书:打开很多模块不是一个好主意。在您的情况下,我将使用点符号: a模块B: 实际上,只需要第一个A.就可以告诉OCaml您想要的类型。这一条也应该有效: let string_of_foo = function | A.Bar ->
type foo = Bar | Baz
a模块B:
以及模块C:
如何更改模块B以重新导出类型foo,从而不必在模块C中打开模块A
谢谢。我现在只学习了3个月的OCaml,所以我的答案可能不是最好的。但根据我开始读的那本书:打开很多模块不是一个好主意。在您的情况下,我将使用点符号: a模块B: 实际上,只需要第一个A.就可以告诉OCaml您想要的类型。这一条也应该有效:
let string_of_foo = function
| A.Bar -> "bar"
| Baz -> "baz"
但我更喜欢始终如一
以及模块C:
我现在才学习OCaml三个月,所以我的答案可能不是最好的。但根据我开始读的那本书:打开很多模块不是一个好主意。在您的情况下,我将使用点符号: a模块B: 实际上,只需要第一个A.就可以告诉OCaml您想要的类型。这一条也应该有效:
let string_of_foo = function
| A.Bar -> "bar"
| Baz -> "baz"
但我更喜欢始终如一
以及模块C:
在B中再出口物品的一个简单方法是将A包含在B中: 通过使用ocamlc-c-ib.ml编译这个b.ml,您可以看到发生了什么:
type foo = A.foo = Bar | Baz
val string_of_foo : foo -> string
b.ml中foo类型、foo=A.foo=Bar | Baz类型的签名可能会让您感到困惑,因为它在OCaml中并不常见。它表明类型B.foo不仅具有相同名称的构造函数,而且与A.foo完全等效
从B重新导出A.foo的另一种方法是使用以下类型定义:
(* b.ml *)
type foo = A.foo = Bar | Baz
let string_of_foo = function
| Bar -> "bar"
| Baz -> "baz"
当您只想重新解释模块中定义的某些类型时,这非常有用。include A重新导出A中定义的所有内容
不要忘记write=A.foo,否则B.foo将成为与A.foo不同的类型,即使它具有相同的名称
通过这些更改之一,您可以编写C而无需直接引用:
open B
let () =
let f = Bar in
print_endline (string_of_foo f)
在B中再出口物品的一个简单方法是将A包含在B中: 通过使用ocamlc-c-ib.ml编译这个b.ml,您可以看到发生了什么:
type foo = A.foo = Bar | Baz
val string_of_foo : foo -> string
b.ml中foo类型、foo=A.foo=Bar | Baz类型的签名可能会让您感到困惑,因为它在OCaml中并不常见。它表明类型B.foo不仅具有相同名称的构造函数,而且与A.foo完全等效
从B重新导出A.foo的另一种方法是使用以下类型定义:
(* b.ml *)
type foo = A.foo = Bar | Baz
let string_of_foo = function
| Bar -> "bar"
| Baz -> "baz"
当您只想重新解释模块中定义的某些类型时,这非常有用。include A重新导出A中定义的所有内容
不要忘记write=A.foo,否则B.foo将成为与A.foo不同的类型,即使它具有相同的名称
通过这些更改之一,您可以编写C而无需直接引用:
open B
let () =
let f = Bar in
print_endline (string_of_foo f)
你在找?你在找?
open B
let () =
let f = Bar in
print_endline (string_of_foo f)