@@ -1,5 +1,7 @@
1+{-# OPTIONS_GHC -fno-warn-redundant-constraints #-}
12{-# LANGUAGE
23 DataKinds
4+ , FunctionalDependencies
35 , PolyKinds
46 , DeriveFunctor
57 , FlexibleContexts
@@ -181,20 +183,25 @@ newtype RowNumber = RowNumber { unRowNumber :: LibPQ.Row }
181183
182184newtype ColumnNumber cs c = ColumnNumber { unColumnNumber :: LibPQ.Column }
183185
184−colNum0 :: ColumnNumber (c0:cs) c0
185−colNum0 = ColumnNumber 0
186+class KnownNat n => HasColumnNumber (n :: Nat) columns column
187+ | n columns -> column where
188+ colNum :: Proxy# n -> ColumnNumber columns column
189+ colNum p = ColumnNumber . fromIntegral $ natVal' p
190+instance {-# OVERLAPPING #-} HasColumnNumber 1 (column1:columns) column1
191+instance {-# OVERLAPPABLE #-}
192+ (KnownNat n, HasColumnNumber (n-1) columns column)
193+ => HasColumnNumber n (column' : columns) column
186194
195+colNum0 :: ColumnNumber (c0:cs) c0
196+colNum0 = colNum (proxy# :: Proxy# 1)
187197colNum1 :: ColumnNumber (c0:c1:cs) c1
188−colNum1 = ColumnNumber 1
189−
198+colNum1 = colNum (proxy# :: Proxy# 2)
190199colNum2 :: ColumnNumber (c0:c1:c2:cs) c2
191−colNum2 = ColumnNumber 2
192−
200+colNum2 = colNum (proxy# :: Proxy# 3)
193201colNum3 :: ColumnNumber (c0:c1:c2:c3:cs) c3
194−colNum3 = ColumnNumber 3
195−
202+colNum3 = colNum (proxy# :: Proxy# 4)
196203colNum4 :: ColumnNumber (c0:c1:c2:c3:c4:cs) c4
197−colNum4 = ColumnNumber 4
204+colNum4 = colNum (proxy# :: Proxy# 5)
198205
199206getvalue
200207 :: (FromValue x y, MonadBase IO io)