This is a Haskell 98 encoding of the shapes example. We use IORefs and records for mutable functional objects. Subtyping is taken care of by tail-polymorphic records. We use an explicit narrow operation to homogenize shapes in collections.