You can get the double dispatch code link here : https://gist.github.com/s3rvac/ddb2a0ffc6bcc1d3b2f6
Without type cast.