
Luke Palmer
2009/2/17 Daryoush Mehrtash
Is there a way to define a type with qualification on top of existing type (e.g. prime numbers)? Say for example I want to define a computation that takes a prime number and generates a string. Is there any way I can do that in Haskell?
You can by providing an abstraction barrier:
Or you can define: newtype Prime = Prime Int -- 'Prime i' represents the i'th prime This has the advantage that it is physically impossible to put a non-prime value into the Prime data type. The disadvantage is that if you somehow need the numerical value of the i'th prime, you need to calculate it: primes :: [Integer] primes = 2 : sieve ... instance show Prime where show Prime i = show (primes!!i) -k -- If I haven't seen further, it is by standing in the footprints of giants