[
Haskellと比べて、
class Functor f where fmap :: (a -> b) -> f a -> f b
- F[_] と書くので、fが型構成子だと明白にわかる。
- ブラケットに型(や型構成子)パラメータを入れるので、総称性がハッキリ。
- Haskell型変数 a, b は、いつのまにか勝手に入っていて正体不明で気持ち悪い。map[A, B] ならmap総称関数に渡る型引数だとハッキリ。
しかし、
implicit val OptionFunctor = new Functor[Option] { def map[A, B](fa: Option[A])(f: A => B) : Option[B] = fa match { case Some(a) => Some(f(a)) case None => None } }
インスタンス化が鬱陶しい。