class Functor f where fmap :: (a -> b) -> f a -> f b
id でファンクター値を写した場合、ファンクター値が変化してはいけない
fmap id = id
2つの関数 f と g について、f と g の合成関数でファンクター値を写したものと、まず g 次に f でファンクター値を写したものが等しくなければならない
fmap (f . g) x = fmap f (fmap g x)