1

があり、をファンクターとして使用して変換をInt適用すると、ラップされた型、つまり. では、これをリフティングと見なすことができますか? もしそうなら、ファンクターは常に持ち上げられた型を返しますか?fmapMaybeMaybe Int

4

2 に答える 2

1

fmapは常に type の関数を取り、type コンストラクターa -> bの type の関数を提供します。したがって、型コンストラクターのアプリケーションを型「リフティング」に呼び出すと、はい、常に「リフティング型」で機能する関数が提供されます。1f a -> f bffafmap

組み込みの Haskell 型クラスFunctorには、メンバーとして種類の型コンストラクターがあり* -> *ます。これは、好きな型に適用して新しい型を生成できるものです (Maybe例のように)。圏論の用語では、型構築子自体 (例: Maybe) はソース圏のオブジェクトからターゲット圏への写像を表し、fmap射の写像を提供します ( Hask圏はオブジェクトとして Haskell 型を持ち、射として Haskell 関数を持っていることを思い出してください)。

したがって、Haskellは、Haskell の型と関数を Haskell の型と関数にマップするためFunctor、Hask カテゴリのエンドファンクタのみを表すことができます。しかし、それを使用してオブジェクト (型) を任意にマップすることはできないため、考えられる endofunctor を表すことさえできません。私の Haskell ファンクターは と にマップできません。型コンストラクターの下で各型を「同じ型」にマップする必要がありIntます ( to 、to 、toなどにマップします)。各 Haskell ファンクターの宛先カテゴリは、ファンクターの型コンストラクターの下にネストされたHaskの完全なミラー イメージです。Maybe StringCharBoolMaybeIntMaybe IntCharMaybe CharMaybe (Maybe (Maybe Bool))Maybe (Maybe (Maybe (Maybe Bool)))

したがって、Haskell のFunctorクラスは、圏論ファンクターの一般的な概念のかなり制限されたバージョンであり、「Hask のエンドファンクター」の概念と比較してかなり制限されています。しかし、Haskell Functor について具体的に話しているのであれば、はい、結果である関数fmapは常に「持ち上げられた」型の値を返します (そして受け取ります)。


1 Haskell の物事に適用される "lifting" と "lifted" には、さまざまな文脈で確立された多くの意味があることに注意してください。討論。

于 2017-04-05T07:26:43.760 に答える