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))

または、モジュールを開くこともできます。しかし、これは悪い習慣と見なされます。つまり

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