Functor 型クラス
Functor は全体を写せるものの型クラス
class Functor f where fmap :: (a -> b) -> f a -> f b
fmap
を持つ。デフォルト実装は無い。f
は1つの型引数を取る型コンストラクタ。
fmap
は、
- ある型 a から 別の型 b への関数
- ある型 a に適用されたファンクター値
を取り、
- 別の型 b のほうに適用されたファンクター値
を返す。
これは map に似ている
map :: (a -> b) -> [a] -> [b]
リストに対する Functor インスタンス宣言
instance Functor [] where fmap = map
map は リスト限定で動作する fmap と同じ。
*Main> fmap (*2) [1..3] [2,4,6] *Main> map (*2) [1..3] [2,4,6]
Maybe は Functor
ファンクターになれるのは、箱のような働きをする型。 リストは色々な値を格納できる箱とみなせる。 Maybe も同じ。
instance Functor Maybe where fmap f (Just x) = Just (f x) fmap f Nothing = Nothing
Maybe型の値に対して fmap を適用する
*Main> fmap (++ " HEY GUYS IM INSIDE THE JUST") (Just "Something serious.") Just "Something serious. HEY GUYS IM INSIDE THE JUST" *Main> fmap (++ " HEY GUYS IM INSIDE THE JUST") Nothing Nothing *Main> fmap (*200) (Just 200) Just 40000 *Main> fmap (*200) Nothing Nothing
所感
Functor は map インターフェースみたいなものか。"関数を写す"というのがよくわからん。"関数を適用する"と違いがあるのか。

- 作者: MiranLipovaca
- 出版社/メーカー: オーム社
- 発売日: 2017/07/14
- メディア: Kindle版
- 購入: 4人 クリック: 9回
- この商品を含むブログを見る