7

タイプレベルの Web DSL であるサーバントライブラリのチュートリアルを読み進めようとしています。ライブラリは、言語拡張機能を広範囲に使用します。DataKind

そのチュートリアルの早い段階で、Web サービスのエンドポイントを定義する次の行を見つけました。

type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]

型シグネチャに文字列と配列があることの意味がわかりません。また、 の前の目盛り ( ') が何を意味するのかわかりません'[JSON]

私の質問は、文字列と配列の型/種類は何か、そしてこれが後でWAI エンドポイントになったときにどのように解釈されるのでしょうか?


補足として、説明するときにNatand を一貫して使用すると、このことを理解しようとするときに、イライラするほど限られた例を見ることができます。その例をさまざまな場所で少なくとも十数回読んだと思いますが、何が起こっているのかまだ理解できていません。VectDataKinds

4

2 に答える 2

3

DataKindsオンにすると、通常のデータ型定義に基づいて自動的に作成される新しい型が得られます。

  • を持っている場合、新しい種類と新しいタイプとdata A = B T | C Uが得られます。 ここで、とは、同様に持ち上げられたとタイプの新しい種類です。A'B :: T -> A'C :: U -> ATUTU
  • 曖昧さが無ければBfor'Bなどと書いても構いません。
  • 型レベルの文字列はすべて同じ kind を共有するため、有効な型としてSymboleg"foo" :: Symbolとがあります。"bar" :: Symbol

あなたの例では、"users"and"sortby"は kind の両方のタイプであり、 kindSymbolJSON(昔ながらの) タイプ(ここで*定義) であり、kind のタイプです。つまり、シングルトン タイプレベル リストです (同じ方法と同等です)。一般的には同等です)。'[JSON][*]JSON ': '[][x]x:[]

[User]type は kind の通常の型*です。それは単純にUsers のリストの型です。これは、シングルトン タイプ レベルのリストではありません。

于 2016-05-04T05:41:14.197 に答える