>#WIP
>関数がGenericに書かれているならば、それらの関数について一定の性質が満たされることが、(unit testとかで確認しなくても)保証される、という話です。具体的な型に落として関数を実装するのでなく、あえてGenericに書くことで得られる良い性質。tweet
fmap :: (a -> b) -> F a -> F b
は、 f
、 g
、 k
、 h
が与えられたときhsg . h = k . f
hs$map g . fmap h = fmap k . $map f
$map
は F
に関する自然なmaphsfmap f = $map f
hsf . g = id . (f . g)
hsfmap f. fmap g = fmap (f . g)
hsfmap id = id
fmap f . fmap g = fmap (f . g)