gpt4 book ai didi

f# - 没有常量 "template arguments"的 F# 泛型?

转载 作者:行者123 更新时间:2023-12-04 14:26:06 24 4
gpt4 key购买 nike

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

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

一种可能的方法可以是受歧视的联合,类似于:

type RangedInt = | Valid of int | Invalid

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

仍然有点 C++ 出没,它看起来类似于:
template<int low,int high>
class RangedInteger { ... };

现在的问题,出现有两个方面:
  • 我是否遗漏了某些东西并且存在 F# 泛型的常量值?
  • 如果我没有错过,那么完成这样一个 RangedInt<int,int> 的惯用方法是什么?在 F# 中?

  • 已找到 Tomas Petricek's blog about custom numeric types ,相当于我在那篇博客文章中的问题是:如果他没有 IntegerZ5 怎么办?但是一个 IntegerZn<int>自定义类型家族?

    最佳答案

    您请求的语言功能称为 Dependent Types ,而 F# 没有该功能。

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

    有一些具有依赖类型的语言,但我认为没有一种语言是主流。我听到最多的可能是 Idris .

    关于f# - 没有常量 "template arguments"的 F# 泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32602760/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com