{-# LANGUAGE ExistentialQuantification #-}
data Rectangle
= Rectangle
Int Int
class HasArea a where
instance HasArea Square where
instance HasArea Circle where
instance HasArea Rectangle where
data Shape = forall s. HasArea s => Shape s
shapes :: [Shape]
shapes = [Shape (Square 5), Shape (Circle 2), Shape (Rectangle 10 5)]
shapeArea (Shape s) = area s
ey0jIExBTkdVQUdFIEV4aXN0ZW50aWFsUXVhbnRpZmljYXRpb24gIy19CgpkYXRhIFNxdWFyZSAgICA9IFNxdWFyZSBJbnQKZGF0YSBDaXJjbGUgICAgPSBDaXJjbGUgSW50CmRhdGEgUmVjdGFuZ2xlID0gUmVjdGFuZ2xlIEludCBJbnQKCmNsYXNzIEhhc0FyZWEgYSB3aGVyZQogICAgYXJlYSA6OiBhIC0+IERvdWJsZQoKaW5zdGFuY2UgSGFzQXJlYSBTcXVhcmUgd2hlcmUKICAgIGFyZWEgKFNxdWFyZSBuKSA9IGZyb21JbnRlZ3JhbCBuICogZnJvbUludGVncmFsIG4KCmluc3RhbmNlIEhhc0FyZWEgQ2lyY2xlIHdoZXJlCiAgICBhcmVhIChDaXJjbGUgcikgPSBwaSAqIGZyb21JbnRlZ3JhbCByCgppbnN0YW5jZSBIYXNBcmVhIFJlY3RhbmdsZSB3aGVyZQogICAgYXJlYSAoUmVjdGFuZ2xlIG4gbSkgPSBmcm9tSW50ZWdyYWwgbiAqIGZyb21JbnRlZ3JhbCBtCgpkYXRhIFNoYXBlID0gZm9yYWxsIHMuIEhhc0FyZWEgcyA9PiBTaGFwZSBzCgpzaGFwZXMgOjogW1NoYXBlXQpzaGFwZXMgPSBbU2hhcGUgKFNxdWFyZSA1KSwgU2hhcGUgKENpcmNsZSAyKSwgU2hhcGUgKFJlY3RhbmdsZSAxMCA1KV0KCnNoYXBlQXJlYSA6OiBTaGFwZSAtPiBEb3VibGUKc2hhcGVBcmVhIChTaGFwZSBzKSA9IGFyZWEgcwoKbWFpbiA9IHByaW50ICQgbWFwIHNoYXBlQXJlYSBzaGFwZXM=