在 ocaml 中输入级别整数

2023-11-22

有人可以给我关于在 OCaml (3.12) 中制作类型级整数支持加法和减法运算的建议/建议吗?

例如,如果我有这样表示的数字:

type zero
type 'a succ
type pos1 = zero succ
type pos2 =  zero succ succ
...

我需要一种方法来定义这样的类型的函数:

val add: pos2 -> pos1 -> pos3

小背景: 我正在尝试移植一些用于物理维度操作的 haskell 代码,并且我需要能够定义维度类型的操作(代表 7 个基本 SI 单位指数的 7 个类型级别整数的记录)。 我需要这样做以避免动态绑定(使用对象时)并使编译器能够静态地评估和检查所有此类表达式。

我目前的理解是,我应该创建一个将操作实现为类型构造函数的 GADT,但我仍然在努力思考这个想法,任何提示都将不胜感激。


您可能也对这篇文章感兴趣Hindley-Milner 的许多洞,作者:Sam Lindley,来自 2008 年 ML 研讨会。

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

在 ocaml 中输入级别整数 的相关文章

  • OCaml:如何运行包含库的脚本

    我正在按照 Real World OCaml 一书来学习 OCaml 许多程序都需要使用 Jane Street Core 库 当我在顶层使用这个核心库中的函数时 它工作得很好 在那里 我只需使用以下命令来打开 Core 库 use top
  • 为什么 Haskell 类型签名声明有多个箭头?

    抱歉 这句话措辞不好 但很难描述 我想我会跳到这个例子 add Integer gt Integer gt Integer add x y x y 为什么 Integer gt Integer gt Integer 代替 Integer I
  • 运营商部分应用

    如果我想在字符末尾添加一个空格以返回列表 如果我不传递任何参数 我将如何通过部分应用程序来完成此操作 还有类型是 space Char gt Char 由于使用 和 运算符出现 解析错误 我在末尾添加空格时遇到问题 到目前为止我所拥有的是
  • 如何在 OCaml 中使协变可观察

    我正在尝试为值制作一个包装器 允许调用者自行注册以获取有关它的通知 这是一些 工作 代码 module Thing sig type a t val make a gt a t val watch a gt unit gt a t gt u
  • “date $1”参数化查询中的 PostgreSQL 语法错误

    尝试参数化我的 SQL 查询 使用 libpq 函数PQexec参数 http www postgresql org docs current static libpq exec html 我陷入了语法错误 SELECT date 1 错误
  • 模板类中的模板函数 is_same

    为什么这段代码会产生错误的输出 this type cpp include
  • 在 OCaml 自定义顶层设置提示

    在 OCaml 自定义顶层中 有没有一种方法可以通过编程方式设置提示 到别的东西 我希望能够更改它以响应用户的最后一个自定义功能 有点像bash你如何设置PS1 我什至找不到 directive 来更改它 谢谢 在 toplevel top
  • 有人在实际应用程序中使用短和字节原始类型吗?

    我自 2004 年以来一直使用 Java 进行编程 主要是企业和 Web 应用程序 但我从来没有用过short or byte 而不是只是为了了解这些类型如何工作的玩具程序 即使在一个for loop100次 我们通常会选择int 我不记得
  • 为什么 Python 布尔值占用超过一个字节?

    显然 Python 中整数占用 24 个字节 我可以理解 它这样做是因为代表无限数字的额外花哨 然而 布尔数据类型看起来也花费了高达 24 个字节 尽管它只能表示两个可能值之一 为什么 除了 1 位表示之外 还可能需要存储哪些额外数据Tru
  • 如何在不实例化一个类的情况下检查它是否继承了另一个类? [复制]

    这个问题在这里已经有答案了 假设我有一个如下所示的类 class Derived some inheritance stuff here 我想在我的代码中检查类似的内容 Derived is SomeType 但看起来像is运算符需要 De
  • Scala Function.tupled 和 Function.untupled 等效于变量 arity,或者使用元组调用变量 arity 函数

    昨晚我试图围绕接受和调用通用函数做一些事情 即类型在调用站点上已知 但可能因调用站点而异 因此定义应该是跨参数通用的 例如 假设我有一个函数f A B C gt Z 其实这样的还有很多fs 我事先不知道 所以我无法确定类型或数量A B C
  • OCaml 文字负数?

    我在学 这是我觉得奇怪的事情 let test treeways x match x with when x lt 0 gt 1 when x gt 0 gt 1 gt 0 如果我这样称呼它 test threeways 10 我会得到类型
  • Ocaml 模块和包的区别

    我基本上是在尝试遵循这篇文章中的 stackoverflow 答案 OCaml 中 HttpRequest 的最佳模块是什么 https stackoverflow com questions 14134116 what is the be
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • Scala:如何将可变参数指定为类型?

    代替 def foo configuration String String 我希望能够写 type Configuration String String def foo configuration Configuration 主要用例是
  • 将两个 Int 值相除以获得 Float 的正确方法是什么?

    我想分两份IntHaskell 中的值并获得结果Float 我尝试这样做 foo Int gt Int gt Float foo a b fromRational a b 但 GHC 版本 6 12 1 告诉我 无法将预期类型 Intege
  • 具有继承类型的 Aux 模式推理失败

    我有一个复杂的玩具算法 我希望纯粹在类型级别上表示 根据饮食要求选择当天菜肴的修改 对卷积表示歉意 但我认为我们需要每一层才能达到我想要使用的最终界面 我的代码有一个问题 如果我们表达一个类型约束Aux 模式生成的类型基于另一个泛型类型 它
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • SQLite支持android的数据类型有哪些

    谁能告诉我 SQLITE 中支持 ANDROID 的数据类型列表 我想确认 TIME 和 DATE 数据类型 这里有一个list http www sqlite org datatype3 htmlSQLite 的数据类型 支持时间和日期间
  • python numpy:更改 numpy 矩阵的列类型

    我有一个 numpy 矩阵 X 我尝试使用以下代码更改第 1 列的数据类型 X 1 astype str print type X 0 1 但我得到了以下结果

随机推荐

  • Docker RUN 不会保留文件

    我有一个 Docker 问题 它不持久通过 RUN 启动命令 这是我的 Dockerfile FROM jenkins latest RUN echo foo gt var jenkins home toto ls alh var jenk
  • Tomcat NioEndpoint - 运行套接字处理器时出错

    在Spring Boot生产应用中 偶尔会抛出以下异常 o a t u n NioEndpoint Error running socket processor java util NoSuchElementException No val
  • 如何为重叠的 x 轴标签替换新行?

    当在 x 轴上绘制长文本因子时 ggplot 的效果并不好 我想换一条新线 以便更清晰 因此下图中的红色标记标签应该向下一行 我在 中找到了这个问题的答案在这里评论但无法工作 代码是 scale x discrete labels func
  • 在Java中实现阻塞函数调用

    在 Java 中实现阻塞函数调用的推荐 最佳方法是什么 稍后可以通过另一个线程的调用来解除阻塞 基本上我想在一个对象上有两个方法 其中第一个调用会阻塞任何调用线程 直到另一个线程运行第二个方法 public class Blocker An
  • javascript 的 Promise、事件循环和作业队列

    考虑以下代码 function foo console log foo new Promise function resolve reject setTimeout function resolve RESOLVING 5000 then
  • OSMdroid 添加自定义图标到 ItemizedOverlay

    我正在使用 ItemizedIconOverlay 类 当前正在地图上显示事件以及具有相同默认图标的用户位置 如何更改每个叠加层的图标集 是否有类似于 google maps 示例的内容 drawable getResources getD
  • Keras:类型错误:无法使用 KerasClassifier pickle _thread.lock 对象

    import pandas as pd import numpy as np import matplotlib pyplot as plt dataset pd read csv Churn Modelling csv X dataset
  • 在选择框中重新填充日期

    我在 Rails 中创建了一个 date select 它有 3 个选择框 一个代表年份 一个代表月份 一个代表日期 2 月 31 日在他们身上是相当令人困惑的 我希望能够只让选择框包含有效日期 我的意思是 当您选择二月时 31 日 30
  • 重建/获取 PHP 函数的源代码

    我可以通过编程方式通过函数名称获取函数的源代码吗 Like function blah a b return a b echo getFunctionCode blah 是否可以 是否有任何 php 自描述函数可以重构函数 类代码 我的意思
  • 如何禁用 Android Studio 3.0 的即时运行

    进行一些更改后 我收到错误 会话 app 安装 APK 时出错 据一些人说 这是因为 Instant Run 在最新的Stable Android Studio 3 0上 在构建 执行 部署我没有任何 即时运行 选项 即使在设置搜索中进行了
  • 如何在C++中将自定义项目添加到系统菜单?

    我需要枚举所有正在运行的应用程序 特别是所有顶部窗户 对于每个窗口 我需要将自定义项目添加到该窗口的系统菜单中 我怎样才能在 C 中实现这一点 Update 我非常乐意为 Windows MacOS 和 Ubuntu 提供解决方案 不过 我
  • 使用钉枪加快 Clojure 启动时间

    我时不时地想用一下会很好clojure for 外壳脚本 但是大约 900ms 的启动时间太慢了 然后我会google首页对于 nailgun clojure 但显示的唯一结果是针对像 vimclojure 这样的特殊情况 那时我假装没有时
  • 从python中的字节中提取LSB位

    我在变量 DATA 中有一个字节 我想从中提取 LSB 位并打印它 我对 python 很陌生 我发现很多文章都有复杂的按位加法逻辑 而且所有这些都很难理解 我正在寻找一个简单的逻辑 就像我们对字符串所做的那样 例如 DATA 7 1 请帮
  • 在 Android 中上传带有进度条且没有 OutOfMemory 错误的大文件

    我在上传大型视频文件 最大 150MB 时遇到问题 1 当我使用此代码时Link1 我可以上传带有进度条的小文件 但是由于我的文件很大 所以android给了我内存不足错误 2 如果我使用这个代码Link2 我能够上传大文件 这确实是一个很
  • 在 C# 中使用 Lisp

    正如很多人指出的那样这个问题 Lisp主要是作为一种学习体验 尽管如此 如果我能以某种方式使用我的 Lisp 算法并将它们与我的 C 程序结合起来 那就太好了 在大学里 我的教授从来没能告诉我如何在程序中使用 Lisp 例程 不 不是用 L
  • 我如何才能收到 Cocoa 应用程序中系统时间更改的通知?

    我有一个可可应用程序 用于记录事件的日期戳 我需要知道系统时间何时重置以及重置多少 但我似乎无法在任何地方发出通知来告诉我发生了这样的事情 由于 NTP 重置时钟或用户重置 例如从系统偏好设置 可能会发生此更改 如果有一个就太好了NSNot
  • 自定义改造 ErrorHandler 给出 UndeclaredThrowableException

    基于这篇文章我应该如何在 Android 上使用 Retrofit 处理 无互联网连接 我做了一个定制ErrorHandler private static class CustomErrorHandler implements Error
  • 如何将字符串解析为java.sql.date

    我有一个字符串 String s 01 NOVEMBER 2012 然后我想将其解析为 sqlDate 并将其插入数据库 是否可以将字符串解析为sql Date 是的 sql日期格式是 yyyy mm dd Use SimpleDateFo
  • 获取模型后渲染 Marionette 区域

    我想使用 Derick Bailey 在 通用问题解决方案 在这个thread获取模型后渲染视图 我将在这里报告他的解决方案 MyView Backbone View extend initialize function this mode
  • 在 ocaml 中输入级别整数

    有人可以给我关于在 OCaml 3 12 中制作类型级整数支持加法和减法运算的建议 建议吗 例如 如果我有这样表示的数字 type zero type a succ type pos1 zero succ type pos2 zero su