問題タブ [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.
haskell - サーバント ハンドラでのいずれかの計算
サーバント サーバー ハンドラは、のnewtype ラッパーであり、、、 などExceptT
のインスタンスを持ちます。MonadThrow
MonadCatch
MonadError
これはやや不自然な例かもしれませんが、私がよく直面する問題を示しています。
ハンドラーで、 を返す 3 つの関数を呼び出してからEither String Int
、 type の計算を実行し、前Int -> Int -> Int -> IO (Either SomeError Text)
の 3 つInt
の s を取得します。
エラーができるだけ早く返されるようにするには、このコードをどのように構成すればよいですか?
Either
のインスタンスを使用して、最初の 3 つの計算を egMonad
に「折りたたむ」ことができます。次に、計算を何らかの結果値にバインドし、を使用して、成功した結果を返すか、型をスローするかを決定します(変換後)。 ?)、しかし、私は次のようなことができることを望んでいました:Either String Int
Either String (Int,Int,Int)
IO
case
throwError
SomeError
上のコードのように書けるでしょうか?
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