是否可以在 F# 中创建将基本类型限制在某个范围内的自定义类型?有条件地看起来像这样的东西
type myInt = Value of int when Value > 1000 & Value < 1000;
并且会在编译时禁止分配无效值
let a : myInt = 1000; //ошибка, не компилируется
是否可以在 F# 中创建将基本类型限制在某个范围内的自定义类型?有条件地看起来像这样的东西
type myInt = Value of int when Value > 1000 & Value < 1000;
并且会在编译时禁止分配无效值
let a : myInt = 1000; //ошибка, не компилируется
F# 中还没有这种可能性。
类似的建议不时出现,您可以阅读讨论,例如在以下问题中:
新类型:约束类型 #553
您所描述的称为依赖类型。有 F# 的库,例如:
依赖类型
它在编译过程中不会报错,但可以避免重复编写这样的代码:
示例取自Designing with types:Constrained strings
您也可以基于ConstraintTP编写自己的类型提供程序,但您也无法实现与 Liquidhaskell的类似物。
您可以考虑编写自己的分析器,但在我看来,这种想法是不值得的,因为您仍然必须通过 Option、Result 或在从外部接收数据时抛出异常来处理转换为您的类型。