我刚刚想到,F#泛型似乎不接受常量值作为"模板参数".
假设有人想创建一个类型RangedInt,它的行为类似于int,但保证只包含一个整数值的子范围.
可能的方法可能是受歧视的联盟,类似于:
type RangedInt = | Valid of int | Invalid
Run Code Online (Sandbox Code Playgroud)
但这也不起作用,因为没有"范围信息的类型特定存储".如果范围不同,2个RangedInt实例应该是不同类型的.
仍然有点C++出没,它看起来类似于:
template<int low,int high>
class RangedInteger { ... };
Run Code Online (Sandbox Code Playgroud)
现在问题出现了两个问题:
RangedInt<int,int>在F#中实现这样一个惯用的方法是什么?找到Tomas Petricek关于自定义数字类型的博客,相当于我对该博客文章的问题将是:如果他不是IntegerZ5一个IntegerZn<int>自定义类型系列怎么办?