如何从同一模块返回一流的模块?

时间:2019-11-02 16:42:08

标签: ocaml

此代码给出“未绑定模块类型测试”:

module type Test = sig
  val test : int -> (module Test)
end

我如何进行这项工作?

1 个答案:

答案 0 :(得分:2)

返回与正在构造的模块相同的模块显然需要递归。但是,递归模块类型不直接允许仅递归模块。因此,解决方案是将模块类型包装在递归模块中:

package com.test.canvas;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
    }
}

请注意,上面的代码使用经典技巧来避免两次编写没有任何运行时组件的模块类型。 然后,新的模块类型可用于:

module rec Test: sig
  module type t = sig val test: int -> (module Test.t) end
end = Test