strange implementation - Re: Bits Problem

Marc Ziegert coeus@gmx.de
Sun, 6 Apr 2003 16:36:00 +0200


I'm confused.

Does it mean that objects basing on bits have to be of Num because of an =
default implementation that they don't use?
A List of Bits should be instance of Bits, too.
Instead of default imlementations that use Num functions, there could be =
an instance of all Integrals. (Integer is instance of Bits too, so there =
should not be any problem with rotations.)

class Bits a where ...

instance (Integral a) =3D> Bits a where ...





Am Sonntag, 6. April 2003 15:35 schrieb Glynn Clements:
> Dominic Steinitz wrote:
> > Can anyone explain this? Hugs doesn't complain.
> >
> > Prelude> :set --version
> > The Glorious Glasgow Haskell Compilation System, version 5.04.1
> >
> > test.hs:5:
> >     No instance for (Num Bool)
> >     arising from the instance declaration at test.hs:5
> >     In the instance declaration for `Bits Bool'
> >
> > module Main(main) where
> >
> > import Bits
> >
> > instance Bits Bool where
> >    complement False =3D True
> >    complement True  =3D False
>
> GHC's definition of Bits requires that instances of Bits are also
> instances of Num.
>
> This constraint is required for the default implementations of bit and
> testBit:
>
>     bit i               =3D 1 `shift` i
>     x `testBit` i       =3D (x .&. bit i) /=3D 0