[Haskell-beginners] Re: Restricting integers in a type?

Ertugrul Soeylemez es at ertes.de
Sun Dec 28 10:26:10 EST 2008

Colin Paul Adams <colin at colina.demon.co.uk> wrote:

> I want to declare a type thus:
> type Coordinate = (Int, Int)
> But the two integers must be confined to the inclusive range 0-11. Can
> i express that in the type system?

Well, the type system allows you to create your own ranged integer type.
Here is a rather inflexible, but working method to do it:

  newtype Int12 = Int12 Int
    deriving (Eq, Read, Show)

  instance Num Int12 where
    Int12 x + Int12 y
      | x+y <= 11 = Int12 (x+y)
      | otherwise = error "Int12 addition out of range"


nightmare = unsafePerformIO (getWrongWife >>= sex)

More information about the Beginners mailing list