我想定义一个通用函数来获取范围内的下一个值。我有以下函数定义:
nextValInRange :: (Enum a) => a -> a
nextValInRange = succ
上述定义的问题在于,对于分数值,我想更改 succ 函数增量的值。我希望 succ 不增加 1.0,而是增加 0.2。例如:
(succ 10.0) = 10.2, not 11.0
问题是我仍然希望 nextValInRange 函数适用于 Enum 类型类中的任何值。
我可以写:
nextValInRange :: (Enum a, Num a) => a -> a -> a
nextValInRange stepVal rangeVal = rangeVal + stepVal
但我不想添加 Num 类型的类限制。
有没有一些我可以用来实现这一目标的haskell voodoo?
我能想到的另一个解决方案是有 2 个单独的 nextValInRange 函数,1 个用于 Nums,另一个用于普通 Enums。
TIA