問題タブ [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 文字: 年齢、右寄せ、ゼロ詰め
数値フィールドは常に右揃えで、ゼロが埋め込まれます。テキスト フィールドは常に左揃えで、スペースが埋め込まれます。
例えば:
これを型システムで表現できますか?サーヴァントのように?このようなもの?
シリアライゼーションの実装が型と一致することを静的に確認できますか?
Name
3 番目のフィールド ( )のオフセットが であることを静的に確認できます11
か? 前のフィールドの長さを合計すると 11 になりますか? 完全な依存型のサポートが必要になるように思われるので、私はノーだと思います。
これは正しい軌道に乗っていますか?
更新:静的に検証したい関数の例:
haskell - SqlBackend と PersistEntityBackend の型の不一致を解決するには?
servant
とライブラリの両方を使用しpersistent
て REST API をinsertUnique
作成すると、新しいエンティティを作成するために使用するタイプの不一致エラーが発生します。
問題のある機能は次のとおりです。
次のエラーが発生します。
参考までに、runDb
関数:
そしてApp
ニュータイプ:
insertUnique
asの結果をタイプヒントしようとしまし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/...
。
Servant
ZonedTime
で簡単に変換でき... :> Capture "zt" ZonedTime :> ...
ます。
次に、私のアプリはいくつかの計算を行い、json-response でこれと他のいくつかのZonedTime
s をクライアントに返したいと考えています。
入力タイムゾーンがゼロでない場合+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 がより良い解決策を提案できることを願っています