ad-3.4でのTraversableの使い方を見て、こういうときに使うと便利なのね、というのを初めて実感した。 例えば、勾配を求める関数gradの型は (Traversable f, Num a) ⇒ (∀ s. Mode s ⇒ f (AD s a) → AD s a) → f a → f a で、対象とする関数の引数部分の構造がTraversableでパラメータ化されている。 なので、手軽に試すためにリストを使っても良いし、性能のためにVectorを使っても良いし、各成分に名前でアクセスしたければMapを使う、といったことが自由にできる。