私は楽しみと利益のためにいくつかの CRUD ヘルパーを書いています。あなたがそうmempty
する:>
なら、へ。
これは私が書きたいことです:
type Index model =
Reassoc (QueryParams model :> Get '[JSON] (Collection model))
type family Reassoc xs where
Reassoc ((x :> y) :> z) = Reassoc (x :> Reassoc (y :> z))
Reassoc (x :> y) = x :> y
type family QueryParams model
type instance QueryParams User =
MakeQueryParams '[ '("organizationId", Int) ]
もちろん、それはすべてこの男に構築されています。
type family MakeQueryParams xs where
MakeQueryParams ( '(sym, ty) ': xs )
= QueryParam sym ty :> MakeQueryParams xs
MakeQueryParams '[]
= ... :(
空のルートコンビネータはありますか?
これまでのところnext
、これらのファミリのパラメーターを使用してこの問題を回避してきましたが、Servant の場合はあまり慣用的ではありません。
type family MakeQueryParams xs next where
MakeQueryParams '[] next =
next
MakeQueryParams ('(sym, ty) ': xs) next =
QueryParam sym ty :> MakeQueryParams xs next
type Index model = QueryParams model (Get '[JSON] (Collection model))
type family QueryParams model next
type instance QueryParams User next =
MakeQueryParams '[ '("organizationId", Int) ] next