我是 Haskell 的新手,想知道是否可以定义一个仅在现有类型的子集上定义的函数,而实际上不必定义新类型。
示例:我想创建一个只接受偶数(甚至自然数等)并返回的函数,例如该数字的平方,例如:
squared :: 2*Integer -> Integer
squared n = n*n
当然,上述两行不起作用。
我知道我可以这样写:
squared' :: Integer -> Integer
squared' n
| (even n) = n*n
| otherwise = error "n is not even!"
或类似的东西,但我想知道像非工作示例这样的东西是否也是可能的。
我希望这个问题不是完全愚蠢的(或者已经回答了),但我真的不太了解 Haskell(所以寻找答案也有点困难)......