我想知道是否有一种方法可以使像Int
类型的内容仅表示数字的某个子集(如0〜29),并且如果您尝试对它进行其他操作,则会使编译器抛出错误。
我知道我可以做类似type MoonPhaseDay = Day1|Day2| ... |Day29
的操作,但是不会扩展更大的范围。
我正在尝试牢记“使不可能的状态无法代表”的建议。我可以通过Int
来解决,但我很好奇是否有更好的方法。
最佳答案
您正在寻找的东西有时被称为“从属类型”,并且今天还不是Elm的一部分。
但是,您可以通过在其自己的模块中创建类型来获得类似的结果,而不是导出原始类型构造函数,而仅导出您提供的自定义函数(使其成为“不透明类型”)。这样,该模块包含唯一需要保护的代码。
在了解不透明类型时,This answer by Nathan可能会有所帮助。
关于types - 如何制作代表数字子集的数据结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56812185/