Haskellを勉強していて、Functorの章に入ったんだけど、定義を見てふと思った。
class Functor f where
fmap :: (a -> b) -> f a -> f b
このf、functionのfに見えてややこしい。
だって、fmapに渡すのは関数(a -> b)だけど、fに入るのってMaybeとか[]とかの型だし。
だったらこれ、fじゃなくて typeのt にした方がいい。
class Functor t where
fmap :: (a -> b) -> t a -> t b
こっちの方がいいよねって話。
そんなことを、ChatGPT先生に聞いてみた。
それ、確かにわかりにくいよね。
でもこのfは「Functorのf」として慣習的に使われてるだけで、別にtにしても意味はまったく同じなんだよ。初学者はtの方がピンとくるかもね。
とのこと。まぁそうですよねって感じ。
雑にまとめると、可読性を取るか言語としての美しさを取るかって話なんだと思う。
Pythonなら可読性に寄ってたかもだけど、Haskellはそういう思想じゃないからfなんだろうね。おもろいね。