調べてみましたが、結局継承の代替えが型クラス以外ありませんでしたので
Haskellでほぼ手続き型で書きました
http://ideone.com/GJV1KA

結局>>935と同じような長さになりました
疲れた〜