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 264 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!