2

私は楽しみと利益のためにいくつかの 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
4

1 に答える 1