Haskell-functor
ハスケル-ファンクター
Haskellの Functor は、さまざまなタイプの機能表現の一種であり、マッピングできます。 これは、ポリモーフィズムを実装するための高レベルの概念です。 Haskell開発者によると、リスト、マップ、ツリーなどのすべてのタイプ Haskell Functorのインスタンスです。
- ファンクター*は、次のような関数定義を持つ組み込みクラスです-
この定義により、 Functor は関数、たとえば* fmap()を取り、別の関数を返す関数であると結論付けることができます。 上記の例では、 fmap()は関数 map()*の一般化された表現です。
次の例では、Haskell Functorの動作を確認します。
ここでは、減算演算のリストで* map()と fmap()*の両方を使用しています。 両方のステートメントが、要素[1,3,7,15]を含むリストの同じ結果を生成することがわかります。
両方の関数が* subtract()*と呼ばれる別の関数を呼び出して結果を生成しました。
次に、 map と fmap の違いは何ですか?違いはそれらの使用法にあります。 Functor を使用すると、「just」や「Nothing」など、さまざまなデータ型の機能主義者を実装できます。
上記のコードは、端末に次の出力を生成します-
Applicative Functor
Applicative Functorは、Applicative Type Classによって提供されるいくつかの追加機能を備えた通常のFunctorです。
Functorを使用して、通常、既存の関数とその内部で定義された別の関数をマッピングします。 ただし、Functor内で定義された関数を別のFunctorにマップする方法はありません。 そのため、 Applicative Functor という別の機能があります。 このマッピング機能は、 Control モジュールの下で定義されたApplicative Typeクラスによって実装されます。 このクラスでは、2つのメソッドのみを使用できます。1つは pure で、もう1つは* <*> *です。
以下は、Applicative Functorのクラス定義です。
実装によると、2つのメソッド "Pure" および* "<*>" *を使用して別のFunctorをマップできます。 「Pure」メソッドは任意のタイプの値を取る必要があり、常にその値のApplicative Functorを返します。
次の例は、Applicative Functorの仕組みを示しています-
ここでは、関数 f1 の関数呼び出しに適用可能なファンクターを実装しました。 私たちのプログラムは次の出力を生成します。
モノイド
Haskellがすべてを関数の形式で定義していることを知っています。 関数には、関数の出力として入力を取得するオプションがあります。 これが Monoid です。
モノイドのタイプクラスの定義を次に示します。
HaskellでのMonoidの使用を理解するには、次の例をご覧ください。
私たちのコードは次の出力を生成します-
ここで、関数「multi」は入力に「1」を乗算します。 同様に、関数「add」は入力に「0」を追加します。 どちらの場合も、出力は入力と同じになります。 したがって、関数* \ {()、1} *および *\ {(+)、0} はモノイドの完全な例です。