Programming with intersection types and bounded polymorphism