use*_*344 18 haskell types typeclass
我想创建一个新的积分类型,它被限制在一定范围内.我试过了:
data PitchClass = PC Int deriving (Ord, Eq, Show)
instance Bounded PitchClass where
minBound = PC 0
maxBound = PC 11
Run Code Online (Sandbox Code Playgroud)
然而,我想要的是如果有的话会失败
PC 12
Run Code Online (Sandbox Code Playgroud)
要么
PC (-1)
Run Code Online (Sandbox Code Playgroud)
被尝试了.
对于您希望在创建新类型的情况下放置约束的情况的一般方法,其中值构造函数不从模块导出,而是返回类型实例和执行约束检查的函数被导出?
对于总值的数量很小的情况的替代解决方案是简单地枚举可能的构造函数.
data PitchClass = A | Bb | B | C | Db | D | Eb | E | F | Gb | G | Ab
deriving (Eq, Ord, Bounded, Show, Read)
Run Code Online (Sandbox Code Playgroud)
你可以从这里尝试六种不同的黑客,以各种方式使它更方便; 例如,您可以派生Enum到get toEnum . fromEnum = id(和toEnum (-1) = {- an exception -}),或者您可以编写一个自定义Integral实例来获取0 = A(以及您选择的行为-1).
| 归档时间: |
|
| 查看次数: |
4593 次 |
| 最近记录: |