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