Suppose we wish to convert a number to its base \( b \) representation. GMP uses arrays of limbs to represent large integers; we need to tease out its base \( 2 ^{64} \) representation.

This can be accomplished with a co-(Elgot algebra) as follows:

import Data.Functor.Foldable import Data.Word

integerToWordList :: Integer -> [Word64] integerToWordList = coelgot pa c where c i = Cons (fromIntegral (i `mod` (2 ^ (64 :: Int)))) (i `div` (2 ^ (64 :: Int))) pa (i, ws) | i < 2 ^ (64 :: Int) = [fromIntegral i] | otherwise = embed ws

This does not entirely justify the added complexity, but the example is nonetheless instructive.

The implementation in the (deprecated) gmpint package is in fact the only example of a co-(Elgot algebra) on the entirety of Hackage!