問題タブ [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 - サーバントのように、型システムでシリアル形式をモデル化する
文字データを追加するだけで、XML または JSON の存在を無視する API 統合に取り組んでいます。(興味がある場合は、 Metro2形式)
単純化していますが、人を次のようにシリアル化する必要があると想像してください。
- At pos 0, 4 chars: メッセージのバイト数
- 位置 5: 6 文字:
"PERSON"ハードコーディング - 位置 11: 20 文字: 名前、左揃え、スペース埋め込み
- 位置 21: 8 文字: 誕生日、
YYYYMMDD - 29 番目の位置: 3 文字: 年齢、右寄せ、ゼロ詰め
数値フィールドは常に右揃えで、ゼロが埋め込まれます。テキスト フィールドは常に左揃えで、スペースが埋め込まれます。
例えば:
これを型システムで表現できますか?サーヴァントのように?このようなもの?
シリアライゼーションの実装が型と一致することを静的に確認できますか?
Name3 番目のフィールド ( )のオフセットが であることを静的に確認できます11か? 前のフィールドの長さを合計すると 11 になりますか? 完全な依存型のサポートが必要になるように思われるので、私はノーだと思います。
これは正しい軌道に乗っていますか?
更新:静的に検証したい関数の例:
haskell - SqlBackend と PersistEntityBackend の型の不一致を解決するには?
servantとライブラリの両方を使用しpersistentて REST API をinsertUnique作成すると、新しいエンティティを作成するために使用するタイプの不一致エラーが発生します。
問題のある機能は次のとおりです。
次のエラーが発生します。
参考までに、runDb関数:
そしてAppニュータイプ:
insertUniqueasの結果をタイプヒントしようとしましSqlBackendたが、同様に紛らわしいエラーが発生します。SqlBackendとPersistentEntityBackendタイプは互換性がありませんか?
それとも、モナドの形式が間違っているのでしょうか?
どんな援助も大歓迎です。
haskell - Haskell サーバント wai ミドルウェアが正しく動作しない
そこで、サーバント サーバーに 2 つの wai ミドルウェアを追加したいと考えています。静的ファイルを提供するための 1 つのミドルウェアと、ログ記録のための 1 つのミドルウェア。
私は自分のAPIを定義routerしました()。これがサーバーを起動する方法です:
そして、これが私の定義方法ですmiddleware:
ここで、logStdoutDev最初に置くと静的ファイルを提供できませんが、staticPolicy最初に置くと静的ファイルを提供できますが、イベントをログに記録する機能が失われます (基本的にそれらは無視されます)。
wai問題は、サーバントでミドルウェアを適切に組み合わせる方法です。
haskell - Haskell サーバント クライアントのチュートリアル
Haskell と Servant は初めてで、公式のチュートリアルを立ち上げて実行しようとしています。私はこのチュートリアルを機能させようと試みてきましたが、一日中機能させることができませんでした.ここにこのような質問を投稿するのは嫌いですが、正直なところ、コードが私はそれに変更を加えていません。他の誰かがこのチュートリアルを実装しようとして、同様の問題を抱えているのではないかと思います.
いくつかのチュートリアルが現在のバージョンのサーバントでは動作しないという投稿を見たことがありますが、このチュートリアルはサーバント クライアントの最新のもののようです。
これはチュートリアルhttp://haskell-servant.readthedocs.io/en/stable/tutorial/Client.htmlです
ここにコードがあります
ここに私が得ているエラーがあります
haskell - JSON から JSON への ZonedTime
AesonとServantの変換に困惑してい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)です。
なんで?何のために?
database - カスタムデータを認証ハンドラーに渡すHaskell Servant
カスタムモナド(リーダー付き)を使用して、DBプールなどのデータをハンドラーに簡単に渡します(カスタムモナドを使用する前に、接続をfn引数として渡していました)。
これは、カスタムモナドを定義した方法です:
これServerEnvironmentは、データを運ぶために使用する単なるカスタム データ型です。
問題は、私のAuthHandler場合、関数を具体的に使用する必要があることです:
認証ハンドラーとして、次のようなカスタムハンドラーを使用できません:
ConnectionPoolまた、署名を次のようにできないため、 my を渡す方法もありません。
IOでは、グローバル状態を使用せずに、サーバントの認証ハンドラーに追加のデータを渡すにはどうすればよいでしょうか?
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です。ルートの訪問回数をデータベースに追加するのは、単なる例です。訪問数をカウントするより良い方法などには興味がありません。
haskell - サーバント クライアントで ReaderT ベースのクライアント ラッパーを使用する
RESTリソースを呼び出すために使用するClientM追加のパラメーターを使用して、サーバントのモナドを拡張しようとしています。Token
次に、サーバント パターン マッチング用に次のように定義します。
今、私の拡張クライアントが遊びに来ます。これは私がそれを使用する方法です:
問題は、より良い方法で実装getTおよびpostT機能する方法です。
現在の解決策を投稿しますが、ここでより経験豊富な haskeller がより良い解決策を提案できることを願っています