使用第一类模块时,类型构造函数“...”将转义其范围

2024-02-25

给定一个简单的工厂:

module type Factory  = sig type t val create : unit -> t end
module FactoryImpl : Factory = struct 
   type t = string
   let create: unit -> t = fun ()  -> "aaa" 
end 
let factory: (module Factory) = (module FactoryImpl)
let f = let module F = (val factory) in F.create ()

编译器抱怨:

This has type:
F.t
But somewhere wanted:
F.t
The type constructor F.t would escape its scope

我对 OCaml 模块很陌生,不知道如何告诉编译器f属于类型Factory.t


这里的问题是F.create ()产生一个类型的值F.t, so f应该有类型F.t,但这是不可能的,因为F不受约束于外部let module绑定F.

如果扩大范围F为了成为全局的,程序将输入检查:

module type Factory = sig
  type t
  val create : unit -> t
end

module FactoryImpl : Factory = struct
  type t = string
  let create: unit -> t = fun () -> "aaa"
end

let factory: (module Factory) = (module FactoryImpl)

module F = (val factory)

let f = F.create ()

注意Factory.t不是有效类型,因为没有绑定到该名称的模块Factory。模块和模块类型位于不同的命名空间中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用第一类模块时,类型构造函数“...”将转义其范围 的相关文章

随机推荐

  • 带脚本的文本编辑器...适用于 Linux

    一段时间以来 我一直在我的 Windows 机器上使用 UltraEdit 事实证明 使用熟悉的语言 JavaScript 编写脚本的能力非常有用 唯一的问题是我无法在工作时在我的 Linux 机器上使用它 是否有在 Linux 上运行并具
  • 如何“解码”UTF-8 字符?

    假设我想编写一个函数来比较两个 Unicode 字符 我该怎么做呢 我读了一些文章 比如this http en wikipedia org wiki UTF 8 但还是没明白 让我们来 作为输入 已经在范围内了0x0800 and 0xF
  • WIA服务2、在windows xp/7上下载并安装

    我编写了一个从扫描仪扫描图像的应用程序 这在我的开发机器 win7 Ultimate sp1 64位 上运行良好 我尝试在 Windows XP 计算机 或 Windows Server 2008 标准 上运行该应用程序 但失败并出现此错误
  • Android IllegalArgumentException:如果应用程序在后台运行一段时间,则状态类错误

    如果我设置应用程序背景 我认为这是由于内存不足造成的 日志如下 java lang RuntimeException Unable to start activity ComponentInfo com qingdaonews bus co
  • 标头包含深度限制[重复]

    这个问题在这里已经有答案了 我想知道 包含头文件时 包含文件的深度可以无限增加吗 你能在编译时指定一个限制吗 Example main c include A h const int xyz CONST VALUE A h include
  • MapView 没有从 ViewPager 中删除?

    在我的应用程序中 我试图在 ViewPager 内实现地图视图 我的应用程序中有 4 个不同的页面 MapView在第四页 我确实成功加载了地图 但是当我滑回第一页时 必须使用 destroyItem 方法销毁第四个视图 如果我刷到第四页
  • 如何在云监控/stackdriver中按状态显示总dataproc作业?

    Dataproc 作业中应该有成功 失败 待处理状态 当然我可以在 Cloud Console 上 Dataproc 下的作业部分中看到该状态 但是 如何在云监控 stackdriver 中可视化所有这些状态 已经尝试过记分卡图表并使用指标
  • 是否可以从包含操作系统的 .img 文件创建 docker 映像

    是否可以转换 img包含操作系统 Arch Linux 的文件到 Docker 镜像中 更准确地说我想要码头化RuneAudio Raspberry Pi 图像 从完整的操作系统映像生成 Docker 映像通常是一个次优的过程 操作系统映像
  • HTML 注释行为

    所以 我在 Magento WYSIWYG 编辑器 所有东西 中闲逛时注意到呈现为在生成的 HTML 中 似乎也将任何字符串括在呈现正常的评论 我只在 Chrome 中测试过这一点 但这种行为对我来说似乎有点奇怪 我看过W3C 规范评论 h
  • 文本词云绘制错误

    我有以下用于绘制词云的代码 并且收到后续错误 wordcloud dm word dm freq scale c 8 2 min freq 2 max words Inf random order FALSE rot per 15 colo
  • 在 Windows 上为 python 2.7 安装 gstreamer 1.0。

    我一直在尝试在 Windows 上安装 gstreamer 1 0 以用作 python 2 7 模块 我从这里安装了sdkhttp docs gstreamer com display GstSDK Installing on Windo
  • Tensorflow 错误“形状 Tensorshape() 必须具有等级 1”

    import tensorflow as tf import numpy as np import os from PIL import Image cur dir os getcwd def modify image image resi
  • 如何在 C# 中打印 PCL 文件?

    我有一个使用 打印到文件 生成的 PCL 文件 在 C 中以编程方式打印此文件的最佳方法是什么 当然 考虑到我要打印的打印机支持 PCL 我知道我可以通过从提示中调用来进行打印 copy filename pcl location prin
  • iOS App Store 提交:缺少图标 (Cordova)

    我正在制作 Cordova PhoneGap 应用程序并将其提交到 App Store 但是 我收到了一封电子邮件 其中包含以下消息 Invalid Icon Path No icon found at the path reference
  • SQL Server存储过程参数输出

    我有一个存储过程 为了这个问题的目的 我已经大大缩小了它的规模 但本质上我需要帮助的问题是这个 如果表中的一行xyz已更新 我需要将 ID 相互附加并输出回调用应用程序 更新按预期工作 问题在于我构建输出的方式 IPV ID Found 请
  • 在第三方 Django 应用程序中自定义模板

    我在 Django 项目中使用第三方应用程序 django social share 但我需要自定义模板 我不知道如何去做 我尝试的一切都继续使用默认模板 当前默认模板存储在 django social share django socia
  • 我在我的项目中添加 MPAndroidChart 但在我的 xml 中找不到 LineChart

    我想在我的项目中使用 MPAndroidChart 我在我的 gradle 中添加了该库 但在我的 xml 布局文件中 我找不到 Chart 我的 build gradle Module 是这样的 dependencies implemen
  • C# using 语句

    我真的很想把这件事从我的脑海里赶出去 请看下面的代码 using DataTable resultTable DBUtility GetSingleDBTableResult connectionString SELECT FROM MyD
  • SVG 图像未显示在 html 电子邮件中

    我已将 svg 图像嵌入到 html 电子邮件中 它显示在 iPhone 和桌面 Mac 邮件应用程序上 但未显示在我的 Mobileme Web 邮件上 有什么想法吗 这是代码 img src http ww
  • 使用第一类模块时,类型构造函数“...”将转义其范围

    给定一个简单的工厂 module type Factory sig type t val create unit gt t end module FactoryImpl Factory struct type t string let cr