没有带有常量“模板参数”的 F# 泛型?

2024-04-22

我突然想到,F# 泛型似乎不接受常量值作为“模板参数”。

假设有人想创建一种类型RangedInt这样,它的行为类似于 int,但保证只包含整数值的子范围。

一种可能的方法是建立受歧视的工会,类似于:

type RangedInt = | Valid of int | Invalid

但这也不起作用,因为没有“范围信息的类型特定存储”。如果范围不同,2 个 RangedInt 实例也应该是不同的类型。

由于仍然有点 C++ 的影响,它看起来类似于:

template<int low,int high>
class RangedInteger { ... };

现在出现的问题有两个:

  1. 我是否错过了某些内容并且存在 F# 泛型的常量值?
  2. 如果我没有错过这一点,那么完成这样的任务的惯用方法是什么?RangedInt<int,int> in F#?

发现后Tomas Petricek 关于自定义数字类型的博客 http://tomasp.net/blog/fsharp-custom-numeric.aspx/,相当于我对该博客文章的问题是:如果他没有IntegerZ5 but an IntegerZn<int>自定义类型家庭?


您请求的语言功能称为依赖类型 https://en.wikipedia.org/wiki/Dependent_type,而 F# 没有这个功能。

它不是一个特别常见的语言特性,甚至 Haskell(大多数其他函数式编程语言“仰慕”的)也没有真正拥有它。

There are存在依赖类型的语言,但我不认为它们是主流。我听到最多的可能是Idris http://www.idris-lang.org.

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

没有带有常量“模板参数”的 F# 泛型? 的相关文章

  • F# 中的非类型化/类型化代码引用与宏卫生之间是否存在关系?

    我想知道 F 中的非类型 类型代码引用与宏系统的卫生之间是否存在关系 他们是否用各自的语言解决相同的问题 或者它们是不同的关注点 元编程方面是唯一的相似之处 即使在这方面 也存在很大的差异 您可以将宏的转换器视为从语法到语法的函数 就像您可
  • 如何将两个函数调用合并为一个?

    我想合并以下几行 let result1 add numbers let result2 add numbers n 变成这样的东西 let resultX add numbers gt add numbers n 我可以编写这样的函数吗
  • 从 F# 调用 C# 异步方法会导致死锁

    我有一组 F 脚本 它们调用我们创建的各种库 其中许多库公开了最初用 C 编写的异步方法 最近我发现脚本停止工作了 我想距离我上次使用它们已经有半年了 当时它们还可以工作 我试图隔离问题并提出了以下代码来重现它 首先 我们考虑一个包含以下
  • 从传递给 C# 的 F# 列表中检索项目

    我在 C 中有一个在 F 中调用的函数 将其参数传递到Microsoft FSharp Collections List 如何从 C 函数中的 F 列表中获取项目 EDIT 我找到了一种 函数式 风格的方式来循环它们 并且可以将它们传递给如
  • 在 F# 中处理 Deedle 时间序列中的缺失值 (1)

    这是一个小例子 我想处理系列上自定义函数的缺失值 假设我已经获得了一系列 series4 val it Series
  • 函数式 GUI 编程可能吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我最近发现了 FP bug 试图学习 Haskell 到目前为止所看到的东西给我留下了深刻的印象 一流的函数 惰性求值和所有其他好处 我还不是专
  • F#:将字符串选项转换为字符串的最短方法

    目标是转换一个string option这是通过一些很好的类型计算得出的一个简单的string然后可以传递到 UI printf URL 其他只想要一个字符串并且对选项类型一无所知的东西 None应该变成空字符串 显而易见的方法是做一个ma
  • 如何统计字符串中特定字符的出现次数

    我不知道从哪里开始检查字符串中特定字符的 n 次出现 我已经列出了我认为是该功能框架的基本轮廓 但我不确定内容是什么 let countCharFromNth getStr string chkdChar char if getStr Le
  • F# 中的异步 EF 查询

    在使用 EF6 的 C 中 我可以轻松地进行如下异步操作 using var context new MyDbContext var item await context SomeEntities Where e gt e Id 1 Fir
  • 定义具有多种消息类型的消息传递域

    到目前为止 我见过的大多数 F 消息传递示例都使用 2 4 种消息类型 并且能够利用模式匹配将每条消息定向到其正确的处理函数 对于我的应用程序 由于处理和所需参数的不同性质 我需要数百种独特的消息类型 到目前为止 每个消息类型都是其自己的记
  • 如何在 F# 列表和 F# 元组之间进行转换?

    有没有办法在 F List 和 F Tuple 之间进行转换 例如 1 2 3 gt 1 2 3 1 2 3 4 gt 1 2 3 4 我需要两个函数来做到这一点 let listToTuple list let tupleToList t
  • 如何使用 printf 自定义自定义类型的输出?

    我已经阅读了很多内容专家 F 并正在致力于构建一个实际的应用程序 在调试时 我已经习惯了传递这样的 fsi 命令 以使 repl 窗口中的内容清晰可见 fsi AddPrinter fun x myType gt myType ToStri
  • F# 中使用抽象类还是接口?

    从 C 背景开始摸索 F 在 C 中 决定何时使用接口和何时使用抽象类有明显的区别 在 F 中 我发现两者几乎合而为一 我知道 就 CLR 而言 F 中的做法与 C 中的做法相同 但是在 F 中编程时使用的 最佳实践 是什么 我应该完全避免
  • F# 中序列的递归函数

    这是一个相当微不足道的问题 但快速的谷歌搜索并没有给我答案 为序列编写递归函数的标准方法是什么 对于列表 您可以使用空列表和头 尾模式进行模式匹配 序列的等效项是什么 没有标准的方法可以做到这一点 因为您很少为序列编写递归函数 您应该查看各
  • 如何更改 Rx Builder 实现来修复堆栈溢出异常?

    我正在尝试提出一个 Rx Builder 以在 F 计算表达式语法中使用反应式扩展 我该如何修复它 以免堆栈崩溃 就像下面的 Seq 例子一样 是否有计划提供 RxBuilder 的实现作为响应式扩展的一部分或作为 NET Framewor
  • 如何判断 F# 函数是否是纯函数?

    假设我有这两个 F 函数 let sq x x x let tm DateTime Now 显然 sq 是纯的 因为它对于给定的输入总是返回相同的值 而 tm 是不纯的 因为每次调用它时都会返回不同的值 一般来说 有没有一种方法可以确定 F
  • F# 2010 Seq.generate_using

    Visual Studio 2010 中的 Seq generate using 是否有替代 解决方法 FSharp PowerPack dll 不适用于 2010 AFAIK 很抱歉 2010 年的 PowerPack 尚未上市 我不记得
  • 如何在 F# 中捕获任何异常(System.Exception)而不发出警告?

    我试图捕获异常 但编译器给出警告 此类型测试或向下转型将始终保持 let testFail try printfn Ready for failing failwith Fails with System ArgumentException
  • 什么是错误“类型实例化涉及 byref 类型。” F# 中的解决方法是什么

    我有一些代码包装 TA Lib 很多包装器非常相似 let sma timePeriod int data float let mutable outStartIndex 0 let mutable outNbElement 0 let m
  • F# 类型提供程序与 Lisp 宏

    我一直在阅读有关 F 3 0 类型提供程序的内容 例如here http msdn microsoft com en us library hh156509 aspx 并且它们似乎基于一种编译时代码生成 在这方面我想知道它们与 Lisp 宏

随机推荐

  • Three.js StereoEffect 显示 2 只眼睛的网格

    我有一个使用 StereoEffect 渲染器的 THREE js 场景 但是 当我向场景添加新网格时 它们会显示在两只眼睛上 而不是为每只眼睛重复显示 我相信 THREE js 应该自动完成 我不必自己复制它们 我尝试复制它们 但这是很多
  • Facebook Messenger API:发送结构化消息

    当关注时这个例子 https developers facebook com docs messenger platform quickstart messageData attachment type template payload t
  • 将 mbTiles 文件合并在一起的最佳方法

    我已经从 openMapTiles 为美国地图的不同子区域生成了 mbtile 现在 我想将所有生成的 mbTiles 文件合并在一起 有什么更好的方法来做到这一点 Thanks 一旦你有tile join https github com
  • 在 SD 卡上安装 Android 应用

    我开发了一个可以安装在 SD 卡或移动内存中的应用程序 我用了android installLocation属性设置为 auto 现在我面临的问题是 当我在设备上运行应用程序时 它显示我已启用 移动到 SD 卡 按钮 但是当我将应用程序上传
  • 如何使用 tf.data.Dataset.from_generator() 将参数发送到生成器函数?

    我想创建多个tf data Dataset使用from generator 功能 我想向生成器函数发送一个参数 raw data gen 这个想法是生成器函数将根据发送的参数产生不同的数据 这样我想raw data gen能够提供训练 验证
  • 在 C# 中,为什么不能在 foreach 循环中修改值类型实例的成员?

    我知道值类型应该是不可变的 但这只是一个建议 而不是规则 对吗 那么为什么我不能做这样的事情 struct MyStruct public string Name get set public class Program static vo
  • 如何去掉ListView添加item的动画?

    我有一个ListView我编辑了它ItemContainerStyle修改某些样式 但我不知道如何在添加项目时删除那个烦人的动画 With an ItemsControl 当您添加新项目时 它会立即出现 没有任何动画 With ListVi
  • 如何完全清除所有 matplotlib 图的内存

    我有一个数据分析模块 其中包含调用的函数matplotlib pyplotAPI 多次 每次运行最多生成 30 个数字 这些数字在生成后会立即写入磁盘 因此我需要将它们从内存中清除 目前 在每个函数结束时 我都会 import matplo
  • 如何使用 drf-yasg 自动生成的 swagger 页面配置“HTTPS”方案?

    我知道在传统的 swagger YAML 文件中 我们可以使用以下方式定义方案 schemes http https OR schemes http https 但是 我如何使用自动生成的 swagger 页面做同样的事情drf yasg图
  • Android MediaRecorder 和 setOutputFile

    我阅读了 Android SDK 发现 MediaRecorder 类可以从相机 音频或其他源获取输入并对其进行压缩 通过 setOutputFile 方法 您可以指定要存储数据的位置 文件或 URI 但是如果我想将该数据存储在内存缓冲区中
  • 将字符向量列表转换为数据帧

    我的输出 a 看起来像 str a List of 8883695 chr 1 3 20MICRONS A ACCRUALS chr 1 3 20MICRONS A ACCRUALS chr 1 3 20MICRONS A ACCRUALS
  • 检查针对 SQL Server 数据库的 LINQ 查询

    有什么方法可以在 NET 中查看我们正在触发的针对数据库的 LINQ 查询吗 例如 我正在 LINQ 中编写一个查询 我想看看触发了什么 SQL 查询来与数据库进行通信 有没有 Visual Studio 窗口或其他方式 你在寻找类似的东西
  • 带 python 列表的循环引用

    有人可以解释一下吗 gt gt gt x x 0 0 gt gt gt x gt gt gt x is x 0 True gt gt gt x 0 0 0 0 0 0 0 gt gt gt x in x True what is 这只是 P
  • OpenCV 3.0.0 使用 FFMPEG 时出错

    我使用 OpenCV 一段时间了 但是 我最近将系统更改为没有任何管理员权限的集群 问题是这样的 在我的主文件夹中 我安装了 FFMPEG ffmpeg 网站上提供的最新稳定版本 我将它安装在 HOME 中 因此在 HOME lib 中安装
  • sso 用户的 s3 存储桶策略

    我想允许特定角色 test role 在特定存储桶 test bucket 上执行所有 s3 操作 拒绝为所有其他人提供桶 我写的 s3 策略 Version 2012 10 17 Id Policy1601973417173 Statem
  • 以编程方式发送自动电子邮件[重复]

    这个问题在这里已经有答案了 我想以编程方式发送电子邮件 我尝试了以下代码 最终意图 emailIntent 新意图 android content Intent ACTION SEND emailIntent setType plain t
  • iOS:Firebase 令牌返回 null

    我目前正在尝试按照 Firebase 官方文档来实现 Firebase Cloud Messaging 我已在启用推送通知的情况下解决了证书和配置文件的问题 我还使用 CocoaPods 安装了所有必要的框架 FirebaseMessagi
  • 将 LinkBut​​ton 的 OnClick 事件设置为代码隐藏中的方法

    我正在从我的代码隐藏构造一个 LinkBut ton 我需要将 onclick 分配给一个方法 并用它传递一个参数 到目前为止我有这个 LinkButton lnkdel new LinkButton lnkdel Text Delete
  • 在 FIFO 上写入“复杂”结构

    我正在使用 C 语言与客户端服务器进行某种 餐厅 实现 我正在尝试通过 FIFO 发送以下结构 typedef struct int numtable table number to send answer char timestamp 2
  • 没有带有常量“模板参数”的 F# 泛型?

    我突然想到 F 泛型似乎不接受常量值作为 模板参数 假设有人想创建一种类型RangedInt这样 它的行为类似于 int 但保证只包含整数值的子范围 一种可能的方法是建立受歧视的工会 类似于 type RangedInt Valid of