[Haskell-cafe] question on types

Ketil Malde ketil at malde.org
Wed Feb 18 04:57:47 EST 2009

Luke Palmer <lrpalmer at gmail.com> writes:

> 2009/2/17 Daryoush Mehrtash <dmehrtash at gmail.com>

>> 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)

If I haven't seen further, it is by standing in the footprints of giants

More information about the Haskell-Cafe mailing list