我建议签署
isPrime :: Integer -> Bool
• 签署: Int -> Bool将排除对增量数字的快速测试,因为这些测试通常会过长(在技术方面,Integer
,至少在integer-gmp
提供的版本中是如此),但你很可能在出现这种情况之前将失去记忆long,因此我们可以维持一个定点编码的虚构。
• 犯罪 整体性a =>a-> Bool将是任何可行的执行。 一种实例是:<代码>Integral, 一种模型(Z[sqrt(2)]
(尽管这种类型的<代码>toInteger<>/code>是不信仰的),就这种类型而言,2个不是主要内容,如何发现有一般性检验?
Or consider finite types modeling a factor ring Z/(n)
. An Ord
instance for such types would be incompatible with the arithmetic, but we already have that for Int
etc. For example, in Z(6) = {0,1,2,3,4,5}
, the primes would be 2, 3 and 4 (note that none of them is irreducible, 2 = 4*2, 3 = 3*3, 4 = 2*2).
因此,唯一有意义和可行的检验标准是,“它是一种合理(或自然)的主要产品,其价值在这种类型的范围之内? 在<代码>isPrime>的类型中(尽可能不牺牲速度太快)加以捕获。 Integer -> Bool, to be jointly with a to Integer/code> where appropriate.