git.iko.soy/typeable/postgresql-simple
on master help sign in
Change the FromRow instances to applicative style

The concerns detailed in 5f045cc5c80d05b693a3d85a0f7634f7c3bcb471 should now be taken care of by the revised interface. Namely, the Ok constructor must be forced in order to determine whether or not an exception is thrown, and the Ok constructor evaluates it's argument to whnf.

commit1414e24a341d8701a48a9609c8babf823ae21a56 authorLeon P Smith <leon@melding-monads.com> dateSat 3 Mar 2012, 22:58 (15 years ago) parent3ed3c70
1 file changed+15−75
src/Database/PostgreSQL/Simple/FromRow.hs+15−75
src/Database/PostgreSQL/Simple/FromRow.hs+15−75
@@ -83,111 +83,51 @@ numFieldsRemaining = RP $ do
8383 return $! (\(PQ.Col x) -> fromIntegral x) (nfields rowresult - column)
8484
8585instance (FromField a) => FromRow (Only a) where
86− fromRow = do
87− !a <- field
88− return (Only a)
86+ fromRow = Only <$> field
8987
9088instance (FromField a, FromField b) => FromRow (a,b) where
91− fromRow = do
92− !a <- field
93− !b <- field
94− return (a,b)
89+ fromRow = (,) <$> field <*> field
9590
9691instance (FromField a, FromField b, FromField c) => FromRow (a,b,c) where
97− fromRow = do
98− !a <- field
99− !b <- field
100− !c <- field
101− return (a,b,c)
92+ fromRow = (,,) <$> field <*> field <*> field
10293
10394instance (FromField a, FromField b, FromField c, FromField d) =>
10495 FromRow (a,b,c,d) where
105− fromRow = do
106− !a <- field
107− !b <- field
108− !c <- field
109− !d <- field
110− return (a,b,c,d)
96+ fromRow = (,,,) <$> field <*> field <*> field <*> field
11197
11298instance (FromField a, FromField b, FromField c, FromField d, FromField e) =>
11399 FromRow (a,b,c,d,e) where
114− fromRow = do
115− !a <- field
116− !b <- field
117− !c <- field
118− !d <- field
119− !e <- field
120− return (a,b,c,d,e)
100+ fromRow = (,,,,) <$> field <*> field <*> field <*> field <*> field
121101
122102instance (FromField a, FromField b, FromField c, FromField d, FromField e,
123103 FromField f) =>
124104 FromRow (a,b,c,d,e,f) where
125− fromRow = do
126− !a <- field
127− !b <- field
128− !c <- field
129− !d <- field
130− !e <- field
131− !f <- field
132− return (a,b,c,d,e,f)
105+ fromRow = (,,,,,) <$> field <*> field <*> field <*> field <*> field
106+ <*> field
133107
134108instance (FromField a, FromField b, FromField c, FromField d, FromField e,
135109 FromField f, FromField g) =>
136110 FromRow (a,b,c,d,e,f,g) where
137− fromRow = do
138− !a <- field
139− !b <- field
140− !c <- field
141− !d <- field
142− !e <- field
143− !f <- field
144− !g <- field
145− return (a,b,c,d,e,f,g)
111+ fromRow = (,,,,,,) <$> field <*> field <*> field <*> field <*> field
112+ <*> field <*> field
146113
147114instance (FromField a, FromField b, FromField c, FromField d, FromField e,
148115 FromField f, FromField g, FromField h) =>
149116 FromRow (a,b,c,d,e,f,g,h) where
150− fromRow = do
151− !a <- field
152− !b <- field
153− !c <- field
154− !d <- field
155− !e <- field
156− !f <- field
157− !g <- field
158− !h <- field
159− return (a,b,c,d,e,f,g,h)
117+ fromRow = (,,,,,,,) <$> field <*> field <*> field <*> field <*> field
118+ <*> field <*> field <*> field
160119
161120instance (FromField a, FromField b, FromField c, FromField d, FromField e,
162121 FromField f, FromField g, FromField h, FromField i) =>
163122 FromRow (a,b,c,d,e,f,g,h,i) where
164− fromRow = do
165− !a <- field
166− !b <- field
167− !c <- field
168− !d <- field
169− !e <- field
170− !f <- field
171− !g <- field
172− !h <- field
173− !i <- field
174− return (a,b,c,d,e,f,g,h,i)
123+ fromRow = (,,,,,,,,) <$> field <*> field <*> field <*> field <*> field
124+ <*> field <*> field <*> field <*> field
175125
176126instance (FromField a, FromField b, FromField c, FromField d, FromField e,
177127 FromField f, FromField g, FromField h, FromField i, FromField j) =>
178128 FromRow (a,b,c,d,e,f,g,h,i,j) where
179− fromRow = do
180− !a <- field
181− !b <- field
182− !c <- field
183− !d <- field
184− !e <- field
185− !f <- field
186− !g <- field
187− !h <- field
188− !i <- field
189− !j <- field
190− return (a,b,c,d,e,f,g,h,i,j)
129+ fromRow = (,,,,,,,,,) <$> field <*> field <*> field <*> field <*> field
130+ <*> field <*> field <*> field <*> field <*> field
191131
192132instance FromField a => FromRow [a] where
193133 fromRow = do