3

这只是我编写的一个简单程序,旨在更好地理解模块。我正在尝试调用该toS函数,Id("a",Int)但似乎我可以编写这样的类型 ast 。可能是什么问题?

module Typ =
struct
  type typ = Int | Bool
end

module Symbol =
struct
  type t = string
end

module Ast =
struct
  type ast = Const of int * Typ.typ | Id of Symbol.t * Typ.typ
  let rec toS ast = match ast with Id(a,b) -> "a"
    |_->"b"
end


Ast.toS Id("a",Int)
4

1 回答 1

6

您收到一个错误,因为您没有在函数应用程序中用括号括起您的类型构造函数。但是,您还必须通过定义它们的模块之外的完全限定名称来引用类型构造函数。即

Ast.toS (Ast.Id("a",Typ.Int))

或者,您可以打开模块。但这被认为是不好的做法。IE

open Id
open Typ
Ast.toS (Id("a",Int))
于 2012-11-14T20:26:58.300 回答