on dev help sign in
generic constructor
e538877Eitan Chatav
squeal-postgresql/src/Squeal/PostgreSQL/Binary.hs+15−2
@@ -121,10 +121,23 @@ instance (HasOid pg, ToParam x pg)
121 (oid @pg) (unK . toParam @x @pg)
121 (oid @pg) (unK . toParam @x @pg)
122instance
122instance
123 ( IsEnumType x
123 ( IsEnumType x
124− , Show x
124+ , HasDatatypeInfo x
125 , SameLabels (DatatypeInfoOf x) labels
125 , SameLabels (DatatypeInfoOf x) labels
126 ) => ToParam x ('PGenum labels) where
126 ) => ToParam x ('PGenum labels) where
127+ toParam =
128+ let
129+ gcons :: forall y. (HasDatatypeInfo y, Generic y) => y -> String
130+ gcons = gconstructor (constructorInfo (datatypeInfo (Proxy @y))) . from
131+
132+ gconstructor :: NP ConstructorInfo xs -> SOP I xs -> String
133+ gconstructor Nil _ = ""
134+ gconstructor (Constructor name :* _) (SOP (Z _)) = name
135+ gconstructor (Infix name _ _ :* _) (SOP (Z _)) = name
136+ gconstructor (Record name _ :* _) (SOP (Z _)) = name
137+ gconstructor (_ :* constructors) (SOP (S xs)) =
138+ gconstructor constructors (SOP xs)
139+ in
127− toParam = K . Encoding.text_strict . Strict.pack . show
140+ K . Encoding.text_strict . Strict.pack . gcons
128instance
141instance
129 ( SListI fields
142 ( SListI fields
130 , MapMaybes xs
143 , MapMaybes xs