問題タブ [servant]

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 投票する
2 に答える
253 参照

haskell - サーバント ハンドラでのいずれかの計算

サーバント サーバー ハンドラは、のnewtype ラッパーであり、、、 などExceptTのインスタンスを持ちます。MonadThrowMonadCatchMonadError

これはやや不自然な例かもしれませんが、私がよく直面する問題を示しています。

ハンドラーで、 を返す 3 つの関数を呼び出してからEither String Int、 type の計算を実行し、前Int -> Int -> Int -> IO (Either SomeError Text)の 3 つIntの s を取得します。

エラーができるだけ早く返されるようにするには、このコードをどのように構成すればよいですか?

Eitherのインスタンスを使用して、最初の 3 つの計算を egMonadに「折りたたむ」ことができます。次に、計算を何らかの結果値にバインドし、を使用して、成功した結果を返すか、型をスローするかを決定します(変換後)。 ?)、しかし、私は次のようなことができることを望んでいました:Either String IntEither String (Int,Int,Int)IOcasethrowErrorSomeError

上のコードのように書けるでしょうか?

0 投票する
3 に答える
294 参照

haskell - ロジックを純粋な機能に保ちながら、IO アクションを順序付けることはできますか?

ページ分割された API エンドポイントから 2 ページのデータを取得する次のコードがあります。queryデータが見つからなくなるまでページを取得し続けるように関数を変更したいと思います (そのためtake 2、以下のコードを API 応答を確認するものに置き換えます)。

query私の質問は、関数を関数に変更せずにこれを達成できるかどうかですIO。もしそうなら、どうすればそれについて行くことができますか。そうでない場合、再帰関数を書かずにこれを行う方法はありますか?

コードは次のとおりです。


私はこれtakeWhileMを行うために使用しようとしましたが、最終的にクエリをIO関数にして渡しurlました。それはかなり恐ろしく見え始めていて、タイプを一致させることができませんでした(どちらが何であるかでは(a -> m Bool) -> m [a] -> m [a]なく、もっと似たものが必要だと感じました.リストと出力リストは異なります (一方はモナドを持ち、もう一方はそうではありません))。(a -> m Bool) -> [a] -> m [a]takeWhileM