Servant docsには、次の API があります。
type API = "position" :> Capture "x" Int :> Capture "y" Int :> Get '[JSON] Position
:<|> "hello" :> QueryParam "name" String :> Get '[JSON] HelloMessage
:<|> "marketing" :> ReqBody '[JSON] ClientInfo :> Post '[JSON] Email
クライアント関数を次のように定義できます。
api :: Proxy API
api = Proxy
position :<|> hello :<|> marketing = client api
代わりに、API タイプが次のようになったとします。
type API = QueryParam "test" Int :> (
"position" :> Capture "x" Int :> Capture "y" Int :> Get '[JSON] Position
:<|> "hello" :> QueryParam "name" String :> Get '[JSON] HelloMessage
:<|> "marketing" :> ReqBody '[JSON] ClientInfo :> Post '[JSON] Email)
これは元の API と同じですが、すべてのエンドポイントに「テスト」クエリ パラメータが追加されています。クライアント関数を取得するにはどうすればよいでしょうか。パターンマッチングのいくつかのバリエーションを試しましたが、役に立ちませんでした。
他のすべてが失敗した場合、各エンドポイントの API タイプで「test」クエリ パラメータを繰り返すことができますが、これは Haskell であるため、繰り返しを避けるようにしています。