問題タブ [monadplus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
309 参照

haskell - Exc がメンバーの場合の Control.Eff の MonadPlus インスタンス

モナド変換子では、

拡張可能な効果には、次のようなものはありません

私は無駄にそれを実装しようとしました。これが私がこれまでに持っているものです:

2 つの問題があります。

  • の場合mzero、GHC は次のように文句を言います。

    e0GHC が と一致しないのはなぜeですか?

    回答(コメントで提供):オンにするScopedTypeVariables

  • formplusundefinedの逆関数に置き換える必要がrunExcありますが、拡張効果の API で見つけることができません。私は何か見落としてますか ?

理由a <|> b:内で書けるようにしたいMember (Exc e) r => Eff r a、つまり:

  • 試すa
  • aスローする場合はea、試してくださいb
  • bスローする場合はeb、スローしますmappend ea eb

これにはインスタンスが必要です。そのため、最初にインスタンスAlternativeを実装しようとしています。MonadPlus

注: GHC 7.8.3 を使用しています。

よろしくお願いいたします。

0 投票する
2 に答える
96 参照

haskell - モナドによるエラー処理の理解に苦しむ

リストから単一の要素を返す関数を構築しようとしています。リストはMaybe (Int,[Int])tupel の一部です。

リストに要素が含まれていない場合は、エラーを返したいです。リストに含まれる要素が 1 つだけの場合、その要素を Monad として返します。リストに複数の要素が含まれている場合は、エラーを返したいです。

私は少し迷っており、このかなり単純なことを機能させる方法がわかりません。これが私がこれまでに持っているものです:

残念ながら、これをコンパイルしようとしたときに表示されるエラー メッセージは、初心者の私にはまったく役に立ちません。

どんな助けでも大歓迎です!

0 投票する
1 に答える
107 参照

haskell - mzero はガード タイプのシグネチャとどのように一致しますか?

仕組みが理解できませんguard。なぜ型チェックをするのですか?どこかmzeroを返すことはできませんか?m aa /= ()

0 投票する
2 に答える
79 参照

haskell - Aeson パーサー内で MonadPlus をフラット化する

ここで間違ったツリーを吠えているのかどうかはわかりませんが、かなりかさばるように見える Aeson のFromJSON定義があり、それをもっと簡潔なものに変えることができるかどうか疑問に思っていました。ネストされた URI の解析が失敗した場合、オブジェクト全体の解析を省略したいと考えています。

の型はparseURIisparseURI :: String -> Maybe URIと bothMaybeParserhaveMonadPlusインスタンスです。2つを直接構成し、最後に醜いケースステートメントを削除する方法はありますか?

0 投票する
1 に答える
324 参照

haskell - オルタナティブではできるが、モノイドではできないことは何ですか?

Monad + Monoid ではなく、なぜ MonadPlus なのかを読みました。理論的な違いは理解できますが、リストの場合は同じに見えるため、実際の違いを理解することはできません。

はい。実装が異なる可能性があります

しかし、Alternative と同じ方法で Maybe Monoid を実装できます。

では、オルタナティブとモノイドの実際的な違いを説明するコード例を誰かが示すことができますか?

質問は、なぜ MonadPlus ではなく Monad + Monoidの複製ではありませんか?

0 投票する
1 に答える
583 参照

haskell - MonadPlus 操作のシーケンスを漸近的に最適化する Codensity MonadPlus はありますか?

最近、 <-> と <->の関係について質問がありました。DList[]CodensityFree

にこんなものがあるのだろうかと考えさせられたMonadPlusCodensityモナドは、 ではなく、モナド演算に対してのみ漸近性能を向上させますmplus

さらに、以前は がありましたがControl.MonadPlus.Free、 のために削除されましたFreeT f []。また、明示的な free がないため、対応するバリアントMonadPlusをどのように表現するかわかりません。improveおそらく次のようなもの

?


更新:バックトラッキング モナドを使用してそのようなモナドを作成しようとしましたがLogicT、これは次のような方法で定義されているようCodensityです:

であり、バックトラッキング計算、つまり に適していMonadPlusます。

次に、次lowerLogicのようにを定義lowerCodensityしました。

次に、対応するMonadFreeインスタンスを補足した後

定義できる

kただし、私の最初の実験から、いくつかの例では が とは異なるように見えるため、何かが正しくありませんimprovePlus k。これが基本的な制限でLogicTあり、別のより複雑なモナドが必要なのか、それとも定義lowerLogic(または他の何か) が間違っているのかはわかりません。

0 投票する
1 に答える
254 参照

haskell - フリー (またはフリー) モナドでモナド引数を取るアクションをエンコードする方法は?

ほとんどのモナド関数は純粋な引数を取り、モナド値を返します。ただし、モナド引数も必要なものがいくつかあります。たとえば、次のようになります。

それらのそれぞれが異なる問題を引き起こしているようで、フリーモナドを使用してそのようなアクションをエンコードする一般的な方法を把握できません。

  • 両方finallyforkIO問題は、モナド引数が結果とは異なる型であることです。しかし、無料の場合は、のみをエンコードするIO aのようなエンコーディング タイプの型変数に置き換えられるため、それらが同じタイプである必要があります。data MyFunctor x = Finally x x xIO a -> IO a -> IO a

    著者が最初に実装するために使用するHaskellコードの 33 行のゼロから協調スレッドへFork next next

    そして、それを使用して実装します

    入力と出力の型が異なります。しかし、これが何らかのプロセスを使用して導き出されたものなのか、それともこの特定の目的のために機能するアドホックなアイデアなのかはわかりません。

  • mplus特に紛らわしい: 単純なエンコーディング

    配布され>>=提案されたより良い実装はより複雑です。また、 free のネイティブ実装が freeからMonadPlus 削除されました

    freerでは、追加することで実装されます

    MPlus NonDetEff Boolの代わりにあるのはなぜNonDetEff a aですか?CoYoneda functorFreeを使用する以外に、データ型を functor にする必要がある で動作させる方法はありますか?

  • forkExecどうやって進めばいいのかわからないからです。