diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Data/BEncode.hs | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/src/Data/BEncode.hs b/src/Data/BEncode.hs index c844858..fb2fa0b 100644 --- a/src/Data/BEncode.hs +++ b/src/Data/BEncode.hs | |||
@@ -33,6 +33,7 @@ import Data.Maybe (mapMaybe) | |||
33 | import Data.Monoid ((<>)) | 33 | import Data.Monoid ((<>)) |
34 | import Data.Foldable (foldMap) | 34 | import Data.Foldable (foldMap) |
35 | import Data.Traversable (traverse) | 35 | import Data.Traversable (traverse) |
36 | import Data.Word (Word8, Word16, Word32, Word64, Word) | ||
36 | import Data.Map (Map) | 37 | import Data.Map (Map) |
37 | import qualified Data.Map as M | 38 | import qualified Data.Map as M |
38 | import Data.Attoparsec.ByteString.Char8 (Parser) | 39 | import Data.Attoparsec.ByteString.Char8 (Parser) |
@@ -93,7 +94,6 @@ instance BEncodable Int where | |||
93 | fromBEncode _ = decodingError "integer" | 94 | fromBEncode _ = decodingError "integer" |
94 | {-# INLINE fromBEncode #-} | 95 | {-# INLINE fromBEncode #-} |
95 | 96 | ||
96 | |||
97 | instance BEncodable Bool where | 97 | instance BEncodable Bool where |
98 | toBEncode = toBEncode . fromEnum | 98 | toBEncode = toBEncode . fromEnum |
99 | {-# INLINE toBEncode #-} | 99 | {-# INLINE toBEncode #-} |
@@ -335,3 +335,43 @@ instance Pretty BEncode where | |||
335 | PP.rbrace | 335 | PP.rbrace |
336 | where | 336 | where |
337 | ppKV (k, v) = ppBS k <+> PP.colon <+> PP.pretty v | 337 | ppKV (k, v) = ppBS k <+> PP.colon <+> PP.pretty v |
338 | |||
339 | |||
340 | ------------------------------- other instances ------------------------------ | ||
341 | |||
342 | instance BEncodable Word8 where | ||
343 | {-# SPECIALIZE instance BEncodable Word8 #-} | ||
344 | toBEncode = toBEncode . (fromIntegral :: Word8 -> Word64) | ||
345 | {-# INLINE toBEncode #-} | ||
346 | fromBEncode b = (fromIntegral :: Word64 -> Word8) <$> fromBEncode b | ||
347 | {-# INLINE fromBEncode #-} | ||
348 | |||
349 | instance BEncodable Word16 where | ||
350 | {-# SPECIALIZE instance BEncodable Word16 #-} | ||
351 | toBEncode = toBEncode . (fromIntegral :: Word16 -> Word64) | ||
352 | {-# INLINE toBEncode #-} | ||
353 | fromBEncode b = (fromIntegral :: Word64 -> Word16) <$> fromBEncode b | ||
354 | {-# INLINE fromBEncode #-} | ||
355 | |||
356 | instance BEncodable Word32 where | ||
357 | {-# SPECIALIZE instance BEncodable Word32 #-} | ||
358 | toBEncode = toBEncode . (fromIntegral :: Word32 -> Word64) | ||
359 | {-# INLINE toBEncode #-} | ||
360 | fromBEncode b = (fromIntegral :: Word64 -> Word32) <$> fromBEncode b | ||
361 | {-# INLINE fromBEncode #-} | ||
362 | |||
363 | instance BEncodable Word64 where | ||
364 | {-# SPECIALIZE instance BEncodable Word64 #-} | ||
365 | toBEncode = toBEncode . (fromIntegral :: Word64 -> Int) | ||
366 | {-# INLINE toBEncode #-} | ||
367 | fromBEncode b = (fromIntegral :: Int -> Word64) <$> fromBEncode b | ||
368 | {-# INLINE fromBEncode #-} | ||
369 | |||
370 | instance BEncodable Word where | ||
371 | {-# SPECIALIZE instance BEncodable Word #-} | ||
372 | toBEncode = toBEncode . (fromIntegral :: Word -> Int) | ||
373 | {-# INLINE toBEncode #-} | ||
374 | fromBEncode b = (fromIntegral :: Int -> Word) <$> fromBEncode b | ||
375 | {-# INLINE fromBEncode #-} | ||
376 | |||
377 | -- todo: platform independent \ No newline at end of file | ||