Local definitions in the class instances

Boris Lykah lykahb at gmail.com
Thu Jan 27 12:07:58 CET 2011

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.

When implementing Num class for my datatype, I found that I routinely
do unwrapping in each operator definition. I extracted it into
functions, but as they are used only in instance definition, I want to
put them there and restrict them to that scope. It would be neater
than leaving them in the global scope or copypasting into each

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

The extension implementation should be very simple.


More information about the Haskell-prime mailing list