1

ユーザーIDを返すモナド関数があります:

do
 id <- getUserId

getUserId で、getUserId によって返される値のエイリアスを検索して返す関数を「スーパーインポーズ」できる必要があります。

明らかに、特定の関数 getAlias を作成し、モナド自体を書き直すことができます。

do
 id <- getAlias getUserId

しかし、モナドのバインド関数に getAlias を隠すことで、これをより一般的に、再利用可能に、目に見えないようにできると思います。

モナドトランスフォーマーはこの機能を実行しますか、つまり、内部モナドのバインド関数を外部モナドのバインド関数で構成しますか? それとも、ここで他の制御構造が必要ですか?

4

1 に答える 1

1

ここで関数アプリケーションよりも軽量化できるとは本当に思いません。直接の質問に答えるには:

  1. はい、モナド トランスフォーマーは、トランスフォーマーと基礎となるモナドのバインド関数を結合します。
  2. いいえ、一般に、2 つのモナドのバインド関数を組み合わせて、別のモナドのバインド関数を生成することはできません。

getAliasしかし、法を遵守するモナドの拘束になる可能性は低いため、これら2つの直接的な答えのどちらも重要ではないと思います。(少なくとも、バインド関数は非常に多態的でなければなりませんが、そうでgetAliasはありません!)。

于 2012-07-05T17:01:28.630 に答える