
On Thu, Jan 27, 2011 at 3:07 AM, Boris Lykah
I think it would be convenient to allow adding variables and functions, which are not members of the class, to a class instance so that they are visible only in the instance scope. It will help if the same functions are used by several class functions. ....
newtype Wrapped = Wrapped Integer deriving (Show, Eq)
instance Num Wrapped where (+) = lift2 (+) (-) = lift2 (-) (*) = lift2 (*) abs = lift abs signum = lift signum fromInteger = Wrapped lift2 f (Wrapped a) (Wrapped b) = Wrapped (f a b) lift f (Wrapped a) = Wrapped (f a)
Is this meant to mean anything different than
instance Num Wrapped where (+) = lift2 (+) (-) = lift2 (-) (*) = lift2 (*) abs = lift abs signum = lift signum fromInteger = Wrapped
lift2 f (Wrapped a) (Wrapped b) = Wrapped (f a b) lift f (Wrapped a) = Wrapped (f a)
where lift2 and lift are not exported? I think the following syntax would make more sense.
instance Num Wrapped where (+) = lift2 (+) (-) = lift2 (-) (*) = lift2 (*) abs = lift abs signum = lift signum fromInteger = Wrapped where lift2 f (Wrapped a) (Wrapped b) = Wrapped (f a b) lift f (Wrapped a) = Wrapped (f a)
so 'where' indroduces the local instance scope. John