[NumericPrelude] GCD as monoid

Paul McJones paul at mcjones.org
Sun Jul 4 22:59:44 EDT 2010

Would this be like calculating the alignment for a C struct that 
contains various members with individual alignment requirements, in 
which case wouldn't LCM be used, e.g. alignment for a 2-byte object and 
an 8-byte object would be 8 bytes?

In any case, it sounds like using the Writer monad with its Monoid  is 
convenient to organize your code, and 1 is the appropriate identity.


On 7/4/10 1:36 PM, Henning Thielemann wrote:
> On Sun, 4 Jul 2010, Paul McJones wrote:
>> Henning,
>> I don't quite see where you're headed with this proposal. If the problem
>> of units is complicating things, would it be useful to define a
>> semigroup rather than a monoid?
> I encountered that problem when writing some pointer arithmetic in a 
> Writer monad/applicative functor. I used the Writer monad to maintain 
> the required alignment, which is the GCD of the alignments of all 
> atomic pointer accesses. A Writer monad uses the Monoid class for 
> "writing to something", where in my case "writing" means updating the 
> global alignment. In practice pointer alignments are always powers of 
> two, but using GCD we could handle any strange alignment. Then I 
> wanted to define a GCD Monoid generally, and encountered that 
> Prelude's GCD does not work, since:
> Prelude> gcd 0 (-1)
> 1

More information about the Numeric-Prelude mailing list