問題タブ [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.
haskell - Exc がメンバーの場合の Control.Eff の MonadPlus インスタンス
モナド変換子では、
拡張可能な効果には、次のようなものはありません
私は無駄にそれを実装しようとしました。これが私がこれまでに持っているものです:
2 つの問題があります。
の場合
mzero
、GHC は次のように文句を言います。e0
GHC が と一致しないのはなぜe
ですか?回答(コメントで提供):オンにする
ScopedTypeVariables
for
mplus
はundefined
の逆関数に置き換える必要が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 を使用しています。
よろしくお願いいたします。
haskell - モナドによるエラー処理の理解に苦しむ
リストから単一の要素を返す関数を構築しようとしています。リストはMaybe (Int,[Int])
tupel の一部です。
リストに要素が含まれていない場合は、エラーを返したいです。リストに含まれる要素が 1 つだけの場合、その要素を Monad として返します。リストに複数の要素が含まれている場合は、エラーを返したいです。
私は少し迷っており、このかなり単純なことを機能させる方法がわかりません。これが私がこれまでに持っているものです:
残念ながら、これをコンパイルしようとしたときに表示されるエラー メッセージは、初心者の私にはまったく役に立ちません。
どんな助けでも大歓迎です!
haskell - mzero はガード タイプのシグネチャとどのように一致しますか?
仕組みが理解できませんguard
。なぜ型チェックをするのですか?どこかmzero
を返すことはできませんか?m a
a /= ()
haskell - Aeson パーサー内で MonadPlus をフラット化する
ここで間違ったツリーを吠えているのかどうかはわかりませんが、かなりかさばるように見える Aeson のFromJSON
定義があり、それをもっと簡潔なものに変えることができるかどうか疑問に思っていました。ネストされた URI の解析が失敗した場合、オブジェクト全体の解析を省略したいと考えています。
の型はparseURI
isparseURI :: String -> Maybe URI
と bothMaybe
とParser
haveMonadPlus
インスタンスです。2つを直接構成し、最後に醜いケースステートメントを削除する方法はありますか?
haskell - オルタナティブではできるが、モノイドではできないことは何ですか?
Monad + Monoid ではなく、なぜ MonadPlus なのかを読みました。理論的な違いは理解できますが、リストの場合は同じに見えるため、実際の違いを理解することはできません。
はい。実装が異なる可能性があります
しかし、Alternative と同じ方法で Maybe Monoid を実装できます。
では、オルタナティブとモノイドの実際的な違いを説明するコード例を誰かが示すことができますか?
質問は、なぜ MonadPlus ではなく Monad + Monoidの複製ではありませんか?
haskell - MonadPlus 操作のシーケンスを漸近的に最適化する Codensity MonadPlus はありますか?
最近、 <-> と <->の関係について質問がありました。DList
[]
Codensity
Free
にこんなものがあるのだろうかと考えさせられたMonadPlus
。Codensity
モナドは、 ではなく、モナド演算に対してのみ漸近性能を向上させますmplus
。
さらに、以前は がありましたがControl.MonadPlus.Free
、 のために削除されましたFreeT f []
。また、明示的な free がないため、対応するバリアントMonadPlus
をどのように表現するかわかりません。improve
おそらく次のようなもの
?
更新:バックトラッキング モナドを使用してそのようなモナドを作成しようとしましたがLogicT
、これは次のような方法で定義されているようCodensity
です:
であり、バックトラッキング計算、つまり に適していMonadPlus
ます。
次に、次lowerLogic
のようにを定義lowerCodensity
しました。
次に、対応するMonadFree
インスタンスを補足した後
定義できる
k
ただし、私の最初の実験から、いくつかの例では が とは異なるように見えるため、何かが正しくありませんimprovePlus k
。これが基本的な制限でLogicT
あり、別のより複雑なモナドが必要なのか、それとも定義lowerLogic
(または他の何か) が間違っているのかはわかりません。
haskell - フリー (またはフリー) モナドでモナド引数を取るアクションをエンコードする方法は?
ほとんどのモナド関数は純粋な引数を取り、モナド値を返します。ただし、モナド引数も必要なものがいくつかあります。たとえば、次のようになります。
それらのそれぞれが異なる問題を引き起こしているようで、フリーモナドを使用してそのようなアクションをエンコードする一般的な方法を把握できません。
両方
finally
のforkIO
問題は、モナド引数が結果とは異なる型であることです。しかし、無料の場合は、のみをエンコードするIO a
のようなエンコーディング タイプの型変数に置き換えられるため、それらが同じタイプである必要があります。data MyFunctor x = Finally x x x
IO 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
どうやって進めばいいのかわからないからです。