在 F# 中实现受限数字类型的习惯用法/实践?

2023-12-21

假设需要一种数值数据类型,其允许的值落在指定范围内。更具体地说,假设要定义一个最小值为 0、最大值为 5000 的整数类型。这种情况在很多情况下都会出现,例如在对数据库数据类型、XSD 数据类型等进行建模时。

在 F# 中对此类类型进行建模的最佳方法是什么?在 C# 中,实现此目的的一种方法是定义一个结构体,该结构体实现范围检查重载运算符、格式设置等。 F# 中的类似方法如下所述:http://tomasp.net/blog/fsharp-custom-numeric.aspx/ http://tomasp.net/blog/fsharp-custom-numeric.aspx/

我实际上并不需要成熟的自定义类型;我真正想要的是具有受限域的现有类型。例如,我希望能够写出类似的东西

type MyInt = Value of uint16 where Value <= 5000 (pseudocode)

在 F# 中是否有一种简写方法可以执行此类操作,或者是实现上述博客文章中描述的自定义数字类型的最佳方法吗?


您指的是类型理论中所谓的细化类型,正如丹尼尔所指出的,寻找F* http://rise4fun.com/FStar/tutorial/guide。但这是一个研究项目。

至于使用 F# 执行此操作,除了 Tomas 的帖子之外,还可以查看使用类型进行设计 http://fsharpforfunandprofit.com/series/designing-with-types.html series.

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

在 F# 中实现受限数字类型的习惯用法/实践? 的相关文章

随机推荐

  • 制作时钟 UWP (C#)

    我正在为 Windows 10 编写应用程序 需要在 UI 中显示时间 我把显示器做了这样的 Time Text DateTime Now ToString h mm ss tt 但我需要更新它 关于如何做到这一点有什么建议吗 在您的 XA
  • Android 中匹配正则表达式模式的问题

    我正在尝试搜索这个字符串 tt ABC r 725 00 a 55 30 For r 725 00 这是我当前的代码 Pattern p Pattern compile r 0 9 0 9 0 9 Matcher m p matcher r
  • Androidcamera2createCaptureRequest在获取YUV_420_888图像时返回所有黑色像素

    我有一个 Android Camera2 APIpreview在 Kotlin 中使用 suspendCoroutine 进行所有表面设置和回调 运行正常 但是 当我尝试在应用程序启动后 5 秒拍照时 TEMPLATE STILL CAPT
  • ARM 单拷贝原子性

    我目前正在费力地阅读 ARMv7 内核的 ARM 架构手册 在关于内存访问原子性的章节 A3 5 3 中 它指出 如果单副本原子加载与单副本原子存储重叠并且 对于任何重叠字节 加载返回的数据写入 写入插入到该字节的一致性顺序中 单副本原子存
  • 如何在实时Flot图表中显示Json随机数?

    我在 C 页面中创建了一个存储在 json 对象中的随机数 if method rnd Random number this Page Response ContentType application json2 Random rnd ne
  • 有没有标准方法可以使用 stl 在 Linux 上使用 gcc 执行 findfirst、findnext 操作?

    我似乎无法在 Linux 的 gcc 上找到 findfirst findfirst findnext findnext API 并且实际上宁愿使用标准模板库 STL 如果它包含在那里 有谁知道有什么 API 可用于列出 Linux for
  • os.popen 在 Python 2.6 中真的被弃用了吗?

    网上的文档 http docs python org library os html os popen声明 os popen 现已弃用 所有其他已弃用的函数都会适当地引发 DeprecationWarning 例如 gt gt gt imp
  • ASP.NET Web Api - 使用分块传输编码时,框架不会将 JSON 转换为对象

    我在 Android 中有一个 http 客户端 将 HTTP PUT 请求发送到使用 C 和 ASP NET WebApi 框架实现的 REST api 只要 JSON 字段与 C 类中的属性匹配 框架就应该能够神奇地将 JSON 转换
  • Firebase sendPasswordResetEmail 在 React 中不起作用

    我尝试使用 firebase 创建网络应用程序的密码重置选项 其他 firebase 选项工作正常 例如 GoogleLogin 和电子邮件注册 但是当我尝试时sendPasswordResetEmail它返回以下错误 类型错误 fireb
  • 最好的 Python GIS 库? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Laravel Passport - 测试密码授予

    我使用 Laravel 5 7 和 Passport 为第一方客户端创建 API 我有一个登录表单 它接受用户的电子邮件和密码并将两者发送到自定义 LoginController 然后 LoginController 创建一个 oAuth
  • NSPredicate 不适用于字典数组

    我有一个 NSPredicate 其格式如下 Status CONTAINS cd shipped 我有一个字典数组 这是一个例子 Category Category 4 Comp Category 4 Depth 02 Grade New
  • 具有空间数据的 3D 交互式曲面图

    我想创建一个湖泊深度的交互式 3D 表面图 最好使用plotly or rgl图书馆 我已经从一个中提取了我的数据SpatialLinesDataFrameGauss Krueger EPSG 31468 CRS 中的等高线 即公制单位 现
  • 2010 年 .NET Compact Framework 是否更新?

    这个问题 net 紧凑框架 4 0 https stackoverflow com questions 245566 net compact framework 4 0 在VS 2010发布之前就问过这个问题 答案基本上都是说等待发布 现在
  • 请求的资源node.js上不存在Access-Control-Allow-Origin标头[重复]

    这个问题在这里已经有答案了 我在尝试通过 ajax 请求与我的 node js 服务器通信时遇到问题 我已经这样配置我的服务器 var allowCrossDomain function req res next res header Ac
  • 无法从 xml 定义中找到 Activity 中的 onClick 方法

    我试图将一个函数链接到 AndroidStudio 中按钮的 onClick 属性 但由于某种原因 系统无法识别我编码的方法 有趣的是 当我用 Java 编写代码时 它可以正常工作 在 Kotlin 中则不然 我更新了 Kotlin 并检查
  • ul 左侧​​的浮动图像忽略边距/填充

    我有一个段落 后面是一个无序列表 其中有几个列表项 我还有一个图像浮动在其左侧 我遇到的问题是列表项边距 填充与该图像重叠 我希望图像旁边的项目符号按应有的方式缩进 这是一个测试 http testing gorocketfuel com
  • 包含 std::string 的 memset 结构

    我有一个庞大的结构 其中整个内容是标量变量 枚举和标量数组 基于堆栈 但一个 std string 变量除外 现在 这是我的问题 我可以将结构的整个大小设置为 0 就像我会的那样 如果它只是所有标量 或者 std string 在那里是不可
  • 速记类构造函数字段初始化

    我忍不住觉得有一种简写方法可以写成这样 public abstract class MessageBase public String Destination Sender Uid public MessageBase String des
  • 在 F# 中实现受限数字类型的习惯用法/实践?

    假设需要一种数值数据类型 其允许的值落在指定范围内 更具体地说 假设要定义一个最小值为 0 最大值为 5000 的整数类型 这种情况在很多情况下都会出现 例如在对数据库数据类型 XSD 数据类型等进行建模时 在 F 中对此类类型进行建模的最