Proposal: Add hasBitSize to Data.Bits.Bits

Antoine Latter aslatter at gmail.com
Sun Jul 29 18:37:57 CEST 2012


On Sun, Jul 29, 2012 at 10:37 AM, Thomas Schilling
<nominolo at googlemail.com> wrote:
> On 29 July 2012 15:37, Thomas DuBuisson <thomas.dubuisson at gmail.com> wrote:
>>> Is 'bitSize' a useful function to use monomorphically? It seems a
>>> waste and irritating to have it return Maybe if I'm not using
>>> Integer.
>>
>> That is a great point.  Most my uses of 'bitSize' are monomorphic and
>> Maybe would just be silly.  OTOH, I'd be more than happy to fix up any
>> polymorphic code to include a new BitSize constraint.
>
> To make sure I understand this correctly:
>
> The current problem is that bitSize is a partial function *depending
> on the type* of its argument (currently it always returns _|_ for
> Integer, and is total for any other type). That does indeed seem like
> a Bad Idea.
>
> You propose to:
>
>   1. Remove "bitSize" from the Bits class.
>   2. Add a new class BitSize which only contains the "bitSize" method.
> Integer would not be an instance of this class.
>

The downside to this proposal is that the requester (Edward) actually
wants a function of type "a -> Maybe Int", so his polymorphic function
can handle both infinite bit-types and finite bit-types.

With the new class, Edward could write:

class BitTraversable i where
  traverseBits :: <sometype>

instance (BitSize i) => BitTraversable i where
  traverseBits = <something>

instance BitTraversable Integer where
  traverseBits = <something else>

Antoine



More information about the Libraries mailing list