[5] The last example in this article is still based on external polymorphism but removes this limitation