5

Haskellが Functor 型クラスに関する説明を提供することを学びます。

リストの場合、次のように実装されていることがわかります。

instance Functor [] where  
fmap = map  

しかし、これはどのように機能しますか?

型クラス Functor では、fmap には実装さえありません。持っているのは、次のような型宣言だけです。

class Functor f where  
fmap :: (a -> b) -> f a -> f b  

型宣言があるだけで、Haskell はどのようにしてリストのマップ操作を正しく理解するのでしょうか?

4

1 に答える 1

18

maptype の通常の関数(a -> b) -> [a] -> [b]です。とは異なりfmap、型クラスの一部ではありませんFunctor。それはあなたが思うように正確に機能します。

型クラスの背後にある考え方は、型を使用してどの実装を使用するかを判断するというものです。と言うとき、 for (リスト型)instance Functor [] where ...の実装が何であるかをコンパイラに伝えています。fmap[]

この場合、 の実装は、通常の関数であるfmapだけです。map

于 2013-04-02T21:12:15.273 に答える