map f [x1, x2, ..., xn] == [f x1, f x2, ..., f xn]
map f [x1, x2, ...] == [f x1, f x2, ...]
-
- とある
- リスト[]のすべての要素にfを働かせますよ、という関数である
- "mapは便利なので,リスト以外の自分の使ったデータ構造にも同じような「データ構造内の各要素に関数を適用するための関数」"を用意する
- この発想はRでいうところのapply,mapply,lapply...系列の関数と同じ発想
- ここで、mapがしている仕事は、リスト[]に限定されている
- mapの型を":type"コマンドで調べてみると
Prelude> :type map
map :: (a -> b) -> [a] -> [b]
-
-
- (a -> b) という入力型がaで出力型がbであるような関数(入力型はなんでもよく、出力型もなんでもよく、入力型と出力型は同じでも違ってもよい、という関数)と、[a] (何かのリスト) を引数として、[b]というリストを返す仕事です、と書いてある
- リストの要素に(a -> b)処理をして、結果をリストとして返す、という意味
- リストしか受け取れない…
- mapがリストにしか使えないので、リストでないものにも使いたい、という気持ちを実現しているのが、fmap関数
Prelude> :type fmap
fmap :: Functor f => (a -> b) -> f a -> f b
-
- (a -> b) を (f a -> f b)に引き写すのは、圏論の関手(Functor)そのもの