問題タブ [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 投票する
1 に答える
117 参照

haskell - サーバントのように、型システムでシリアル形式をモデル化する

文字データを追加するだけで、XML または JSON の存在を無視する API 統合に取り組んでいます。(興味がある場合は、 Metro2形式)

単純化していますが、人を次のようにシリアル化する必要があると想像してください。

  • At pos 0, 4 chars: メッセージのバイト数
  • 位置 5: 6 文字:"PERSON"ハードコーディング
  • 位置 11: 20 文字: 名前、左揃え、スペース埋め込み
  • 位置 21: 8 文字: 誕生日、YYYYMMDD
  • 29 番目の位置: 3 文字: 年齢、右寄せ、ゼロ詰め

数値フィールドは常に右揃えで、ゼロが埋め込まれます。テキスト フィールドは常に左揃えで、スペースが埋め込まれます。

例えば:

これを型システムで表現できますか?サーヴァントのように?このようなもの?

シリアライゼーションの実装が型と一致することを静的に確認できますか?

Name3 番目のフィールド ( )のオフセットが であることを静的に確認できます11か? 前のフィールドの長さを合計すると 11 になりますか? 完全な依存型のサポートが必要になるように思われるので、私はノーだと思います。

これは正しい軌道に乗っていますか?

更新:静的に検証したい関数の例:

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

haskell - SqlBackend と PersistEntityBackend の型の不一致を解決するには?

servantとライブラリの両方を使用しpersistentて REST API をinsertUnique作成すると、新しいエンティティを作成するために使用するタイプの不一致エラーが発生します。

問題のある機能は次のとおりです。

次のエラーが発生します。

参考までに、runDb関数:

そしてAppニュータイプ:

insertUniqueasの結果をタイプヒントしようとしましSqlBackendたが、同様に紛らわしいエラーが発生します。SqlBackendPersistentEntityBackendタイプは互換性がありませんか?

それとも、モナドの形式が間違っているのでしょうか?

どんな援助も大歓迎です。

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

haskell - Haskell サーバント wai ミドルウェアが正しく動作しない

そこで、サーバント サーバーに 2 つの wai ミドルウェアを追加したいと考えています。静的ファイルを提供するための 1 つのミドルウェアと、ログ記録のための 1 つのミドルウェア。

私は自分のAPIを定義routerしました()。これがサーバーを起動する方法です:

そして、これが私の定義方法ですmiddleware

ここで、logStdoutDev最初に置くと静的ファイルを提供できませんが、staticPolicy最初に置くと静的ファイルを提供できますが、イベントをログに記録する機能が失われます (基本的にそれらは無視されます)。

wai問題は、サーバントでミドルウェアを適切に組み合わせる方法です。

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

haskell - Haskell サーバント クライアントのチュートリアル

Haskell と Servant は初めてで、公式のチュートリアルを立ち上げて実行しようとしています。私はこのチュートリアルを機能させようと試みてきましたが、一日中機能させることができませんでした.ここにこのような質問を投稿するのは嫌いですが、正直なところ、コードが私はそれに変更を加えていません。他の誰かがこのチュートリアルを実装しようとして、同様の問題を抱えているのではないかと思います.

いくつかのチュートリアルが現在のバージョンのサーバントでは動作しないという投稿を見たことがありますが、このチュートリアルはサーバント クライアントの最新のもののようです。

これはチュートリアルhttp://haskell-servant.readthedocs.io/en/stable/tutorial/Client.htmlです

ここにコードがあります

ここに私が得ているエラーがあります

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

haskell - JSON から JSON への ZonedTime

AesonServantの変換に困惑していZonedTimeます。

私のServantアプリには、url: で時間を指定します.../2016-12-18T07:51:00+03:00/...

ServantZonedTimeで簡単に変換でき... :> Capture "zt" ZonedTime :> ...ます。

次に、私のアプリはいくつかの計算を行い、json-response でこれと他のいくつかのZonedTimes をクライアントに返したいと考えています。

入力タイムゾーンがゼロでない場合+0X:00(X /= 0)、出力でも を取得+0X:00しますが、入力で を与える.../2016-12-18T07:51:00+00:00/...と、応答で を取得し2016-12-18T07:51:00Zます。Servantそして、この文字列を で再度フィードしようとすると.../2016-12-18T07:51:00Z/...Servantへの変換に失敗しZonedTimeます。実際は返品HTTP 400 (Bad Request)です。

なんで?何のために?

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

database - カスタムデータを認証ハンドラーに渡すHaskell Servant

カスタムモナド(リーダー付き)を使用して、DBプールなどのデータをハンドラーに簡単に渡します(カスタムモナドを使用する前に、接続をfn引数として渡していました)。

これは、カスタムモナドを定義した方法です:

これServerEnvironmentは、データを運ぶために使用する単なるカスタム データ型です。

問題は、私のAuthHandler場合、関数を具体的に使用する必要があることです:

認証ハンドラーとして、次のようなカスタムハンドラーを使用できません:

ConnectionPoolまた、署名を次のようにできないため、 my を渡す方法もありません。

IOでは、グローバル状態を使用せずに、サーバントの認証ハンドラーに追加のデータを渡すにはどうすればよいでしょうか?

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

haskell - Haskell Servant ハンドラーから現在のルート/URL を取得

ハンドラーに対応する現在のルートを取得したいと思います。参考までに、私のサーバーのモックアップを次に示します。

そして、ここにいくつかのハンドラがあります:

そして私のサーバー:

したがって、基本的に、route1and2Handler現在のルートを取得する方法が必要です。HasServer次のようにインスタンスを実装することにより、リクエストオブジェクトをハンドラーに取得し、そこからURLを抽出しようとしました:


[編集]サーバントの古いバージョンの API を見ていたことに気付きましたが、これはもはや有効ではありません。Newrouteには の型シグネチャがroute :: Proxy api -> Context context -> Delayed env (Server api) -> Router envあり、ここから取得する方法が実際にはわかりませんRequest


そして、route1and2Handler型シグネチャを にするよりも、インスタンスRequest -> Handler Textを作成しようとするとこのエラーが発生します:HasServer

最後に指摘しておくと、私の最終的な目標は、 内から現在のルートを取得することHandlerです。ルートの訪問回数をデータベースに追加するのは、単なる例です。訪問数をカウントするより良い方法などには興味がありません。

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

haskell - サーバント クライアントで ReaderT ベースのクライアント ラッパーを使用する

RESTリソースを呼び出すために使用するClientM追加のパラメーターを使用して、サーバントのモナドを拡張しようとしています。Token

次に、サーバント パターン マッチング用に次のように定義します。

今、私の拡張クライアントが遊びに来ます。これは私がそれを使用する方法です:

問題は、より良い方法で実装getTおよびpostT機能する方法です。

現在の解決策を投稿しますが、ここでより経験豊富な haskeller がより良い解決策を提案できることを願っています