>>> :set -XFlexibleContexts >>> [nextPrime 101 .. precPrime 130] [Prime 101,Prime 103,Prime 107,Prime 109,Prime 113,Prime 127]
[nextPrime 101 ..] [Prime 101,Prime 103,Prime 107,Prime 109,Prime 113,Prime 127...
>>> [nextPrime 101, nextPrime 107 .. precPrime 150] [Prime 101,Prime 107,Prime 113,Prime 131,Prime 137,Prime 149]
>>> succ (nextPrime 101) Prime 103
>>> pred (nextPrime 101) Prime 97
>>> fromEnum (precPrime 100) 25
>>> toEnum 25 :: Prime Int Prime 97
>>> take 10 primes [Prime 2,Prime 3,Prime 5,Prime 7,Prime 11,Prime 13,Prime 17,Prime 19,Prime 23,Prime 29]primes is a polymorphic list, so the results of computations are not retained in memory. Make it monomorphic to take advantages of memoization. Compare
>>> primes !! 1000000 :: Prime Int -- (5.32 secs, 6,945,267,496 bytes) Prime 15485867 >>> primes !! 1000000 :: Prime Int -- (5.19 secs, 6,945,267,496 bytes) Prime 15485867against
>>> let primes' = primes :: [Prime Int] >>> primes' !! 1000000 :: Prime Int -- (5.29 secs, 6,945,269,856 bytes) Prime 15485867 >>> primes' !! 1000000 :: Prime Int -- (0.02 secs, 336,232 bytes) Prime 15485867
>>> take 10 primes [Prime 2+ω,Prime 2,Prime 3+2*ω,Prime 3+ω,Prime 4+3*ω,Prime 4+ω,Prime 5+3*ω,Prime 5+2*ω,Prime 5,Prime 6+5*ω]
>>> take 10 primes [Prime 1+ι,Prime 2+ι,Prime 1+2*ι,Prime 3,Prime 3+2*ι,Prime 2+3*ι,Prime 4+ι,Prime 1+4*ι,Prime 5+2*ι,Prime 2+5*ι]