Hi,

How do you instantiate from classes with method type constraints, such as this 
one:

class C a where
   m :: (Num b) => a -> b

??

I have been trying for some time now but everything I have tried fails.

In particular, what I want to do is something like this:

class Rect a where
        width  :: (Num b) => a -> b
        height :: (Num b) => a -> b

data Num a => PRect a = PRect (a, a) (a, a) deriving (Eq, Show)
data IRect = IRect (Int, Int) (Int, Int) deriving (Eq, Show)

instance Rect IRect where
        width  ( IRect (x1, _ ) (x2, _ ) ) = abs(x2 - x1)
        height ( IRect ( _, y1) ( _, y2) ) = abs(y2 - y1)

In this case, efforts to intantiate IRect from Rect fails with error messages 
like: (using GHCI)
-----8<-----
classtest2.hs:29:
    Cannot unify the type-signature variable `b' with the type `Int'
        Expected type: b
        Inferred type: Int
    In the expression: x2 - x1
    In the first argument of `abs', namely `(x2 - x1)'
-----8<-----

Again, what should I do to make this work?
Also, how is the PRect type to be instantiated?

Regards
/johan
_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to