This question already has answers here:
Positive integer type
(6个答案)
2年前关闭。
说我有一个函数原型(prototype),如下所示:
如何仅强制使用非负整数列表作为输入参数?我必须将参数类型从[Int]更改为什么。在这个公平的时刻,它可以与func [-1,-2]一起使用,我只希望它与[1,2]一起使用,即由解释器喷出错误消息。
请注意不要直接使用NonNegative构造函数。如果将其放在单独的模块中而不导出,则将更加容易。
另外,现在您可以使用(映射到NonNegative)来懒惰地变换数字列表。
无论您在何处注入(inject)原始数字,这仍将需要运行时检查。
或者,您可以使用Data.Word。
(6个答案)
2年前关闭。
说我有一个函数原型(prototype),如下所示:
func :: [Int] -> [Int]
如何仅强制使用非负整数列表作为输入参数?我必须将参数类型从[Int]更改为什么。在这个公平的时刻,它可以与func [-1,-2]一起使用,我只希望它与[1,2]一起使用,即由解释器喷出错误消息。
最佳答案
newtype NonNegative a = NonNegative a
toNonNegative :: (Num a, Ord a) => a -> NonNegative a
toNonNegative x
| x < 0 = error "Only non-negative values are allowed."
| otherwise = NonNegative x
fromNonNegative :: NonNegative a -> a
fromNonNegative (NonNegative x) = x
请注意不要直接使用NonNegative构造函数。如果将其放在单独的模块中而不导出,则将更加容易。
另外,现在您可以使用(映射到NonNegative)来懒惰地变换数字列表。
无论您在何处注入(inject)原始数字,这仍将需要运行时检查。
或者,您可以使用Data.Word。
关于haskell - 非负整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2070989/
10-11 00:28