型名を変更
Productを使用する操作を抽象化＆content操作を追加
shape操作を追加
Traversableの中がTraversableである時、全体がTraversableである定義を追加。　ただし型注釈なしでは使えなくて残念