summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSam T <pxqr.sta@gmail.com>2013-05-12 05:22:46 +0400
committerSam T <pxqr.sta@gmail.com>2013-05-12 05:22:46 +0400
commit2483bec57a19a9f60b84413ba2a9c9953aab9817 (patch)
tree04e78ab505db1ddcb136553209506849c50721f2 /src
parent5236d3370c8dbae456b147ac287828bb1be0b900 (diff)
+ Add instance for tuples.
Diffstat (limited to 'src')
-rw-r--r--src/Data/BEncode.hs63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/Data/BEncode.hs b/src/Data/BEncode.hs
index e3ae292..9b72604 100644
--- a/src/Data/BEncode.hs
+++ b/src/Data/BEncode.hs
@@ -179,6 +179,7 @@ instance BEncodable a => BEncodable [a] where
179 fromBEncode _ = decodingError "list" 179 fromBEncode _ = decodingError "list"
180 {-# INLINE fromBEncode #-} 180 {-# INLINE fromBEncode #-}
181 181
182
182instance BEncodable a => BEncodable (Map ByteString a) where 183instance BEncodable a => BEncodable (Map ByteString a) where
183 {-# SPECIALIZE instance BEncodable (Map ByteString BEncode) #-} 184 {-# SPECIALIZE instance BEncodable (Map ByteString BEncode) #-}
184 185
@@ -189,6 +190,68 @@ instance BEncodable a => BEncodable (Map ByteString a) where
189 fromBEncode _ = decodingError "dictionary" 190 fromBEncode _ = decodingError "dictionary"
190 {-# INLINE fromBEncode #-} 191 {-# INLINE fromBEncode #-}
191 192
193instance BEncodable () where
194 {-# SPECIALIZE instance BEncodable () #-}
195 toBEncode () = BList []
196 {-# INLINE toBEncode #-}
197
198 fromBEncode (BList []) = Right ()
199 fromBEncode _ = decodingError "Unable to decode unit value"
200 {-# INLINE fromBEncode #-}
201
202instance (BEncodable a, BEncodable b) => BEncodable (a, b) where
203 {-# SPECIALIZE instance (BEncodable a, BEncodable b) => BEncodable (a, b) #-}
204 toBEncode (a, b) = BList [toBEncode a, toBEncode b]
205 {-# INLINE toBEncode #-}
206
207 fromBEncode (BList [a, b]) = (,) <$> fromBEncode a <*> fromBEncode b
208 fromBEncode _ = decodingError "Unable to decode a pair."
209 {-# INLINE fromBEncode #-}
210
211instance (BEncodable a, BEncodable b, BEncodable c) => BEncodable (a, b, c) where
212 {-# SPECIALIZE instance (BEncodable a, BEncodable b, BEncodable c)
213 => BEncodable (a, b, c) #-}
214 {-# INLINE toBEncode #-}
215 toBEncode (a, b, c) = BList [toBEncode a, toBEncode b, toBEncode c]
216
217 fromBEncode (BList [a, b, c]) =
218 (,,) <$> fromBEncode a <*> fromBEncode b <*> fromBEncode c
219 fromBEncode _ = decodingError "Unable to decode a triple"
220 {-# INLINE fromBEncode #-}
221
222instance (BEncodable a, BEncodable b, BEncodable c, BEncodable d)
223 => BEncodable (a, b, c, d) where
224 {-# SPECIALIZE instance (BEncodable a, BEncodable b, BEncodable c, BEncodable d)
225 => BEncodable (a, b, c, d) #-}
226 {-# INLINE toBEncode #-}
227 toBEncode (a, b, c, d) = BList [ toBEncode a, toBEncode b
228 , toBEncode c, toBEncode d
229 ]
230
231 fromBEncode (BList [a, b, c, d]) =
232 (,,,) <$> fromBEncode a <*> fromBEncode b
233 <*> fromBEncode c <*> fromBEncode d
234 fromBEncode _ = decodingError "Unable to decode a tuple4"
235 {-# INLINE fromBEncode #-}
236
237instance (BEncodable a, BEncodable b, BEncodable c, BEncodable d, BEncodable e)
238 => BEncodable (a, b, c, d, e) where
239 {-# SPECIALIZE instance ( BEncodable a, BEncodable b
240 , BEncodable c, BEncodable d
241 , BEncodable e)
242 => BEncodable (a, b, c, d, e) #-}
243 {-# INLINE toBEncode #-}
244 toBEncode (a, b, c, d, e) = BList [ toBEncode a, toBEncode b
245 , toBEncode c, toBEncode d
246 , toBEncode e
247 ]
248
249 fromBEncode (BList [a, b, c, d, e]) =
250 (,,,,) <$> fromBEncode a <*> fromBEncode b
251 <*> fromBEncode c <*> fromBEncode d <*> fromBEncode e
252 fromBEncode _ = decodingError "Unable to decode a tuple5"
253 {-# INLINE fromBEncode #-}
254
192dictAssoc :: [(ByteString, BEncode)] -> BEncode 255dictAssoc :: [(ByteString, BEncode)] -> BEncode
193dictAssoc = BDict . M.fromList 256dictAssoc = BDict . M.fromList
194{-# INLINE dictAssoc #-} 257{-# INLINE dictAssoc #-}