summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Truzjan <pxqr.sta@gmail.com>2014-02-28 18:33:26 +0400
committerSam Truzjan <pxqr.sta@gmail.com>2014-02-28 18:33:26 +0400
commitf8569f9384a202de886e12bb3e85b042b526d3cd (patch)
tree036f1f4cb3907d7be992bf65a865ae53e856e437
parentc8fb44ff606940033b82bdb057435860879fd42e (diff)
Fix build failure with bytestring-0.10.2.0
-rw-r--r--bencoding.cabal8
-rw-r--r--src/Data/BEncode/Internal.hs11
2 files changed, 14 insertions, 5 deletions
diff --git a/bencoding.cabal b/bencoding.cabal
index 3793ef4..2c3c5fb 100644
--- a/bencoding.cabal
+++ b/bencoding.cabal
@@ -41,11 +41,13 @@ library
41 , Data.BEncode.Types 41 , Data.BEncode.Types
42 build-depends: base == 4.* 42 build-depends: base == 4.*
43 , ghc-prim 43 , ghc-prim
44 , integer-gmp
44 , deepseq == 1.3.* 45 , deepseq == 1.3.*
46
45 , mtl 47 , mtl
46 48
47 , attoparsec >= 0.10 49 , attoparsec >= 0.10
48 , bytestring >= 0.10.0.2 50 , bytestring >= 0.10
49 , text >= 0.11 51 , text >= 0.11
50 , pretty 52 , pretty
51 ghc-options: -Wall -O2 -fno-warn-unused-do-bind 53 ghc-options: -Wall -O2 -fno-warn-unused-do-bind
@@ -60,7 +62,7 @@ test-suite properties
60 , ghc-prim 62 , ghc-prim
61 63
62 , containers >= 0.4 64 , containers >= 0.4
63 , bytestring >= 0.10.0.2 65 , bytestring >= 0.10
64 , attoparsec >= 0.10 66 , attoparsec >= 0.10
65 67
66 , bencoding 68 , bencoding
@@ -80,7 +82,7 @@ benchmark bench-comparison
80 , deepseq 82 , deepseq
81 83
82 , attoparsec >= 0.10 84 , attoparsec >= 0.10
83 , bytestring >= 0.10.0.2 85 , bytestring >= 0.10
84 86
85 , criterion 87 , criterion
86 88
diff --git a/src/Data/BEncode/Internal.hs b/src/Data/BEncode/Internal.hs
index 4282cbf..e5ba89c 100644
--- a/src/Data/BEncode/Internal.hs
+++ b/src/Data/BEncode/Internal.hs
@@ -8,6 +8,7 @@
8-- This module provides bencode values serialization. Normally, you 8-- This module provides bencode values serialization. Normally, you
9-- don't need to import this module, use 'Data.BEncode' instead. 9-- don't need to import this module, use 'Data.BEncode' instead.
10-- 10--
11{-# LANGUAGE MagicHash #-}
11module Data.BEncode.Internal 12module Data.BEncode.Internal
12 ( -- * Parsing 13 ( -- * Parsing
13 parser 14 parser
@@ -23,10 +24,10 @@ import Control.Applicative
23import Data.Attoparsec.ByteString.Char8 (Parser) 24import Data.Attoparsec.ByteString.Char8 (Parser)
24import qualified Data.Attoparsec.ByteString.Char8 as P 25import qualified Data.Attoparsec.ByteString.Char8 as P
25import Data.ByteString as B 26import Data.ByteString as B
27import Data.ByteString.Internal as B (c2w, w2c)
26import qualified Data.ByteString.Lazy as Lazy 28import qualified Data.ByteString.Lazy as Lazy
27import qualified Data.ByteString.Lazy.Builder as B 29import qualified Data.ByteString.Lazy.Builder as B
28import qualified Data.ByteString.Lazy.Builder.ASCII as B 30import qualified Data.ByteString.Lazy.Builder.ASCII as B
29import Data.ByteString.Internal as B (c2w, w2c)
30import Data.Foldable 31import Data.Foldable
31import Data.List as L 32import Data.List as L
32import Data.Monoid 33import Data.Monoid
@@ -35,17 +36,23 @@ import Text.PrettyPrint hiding ((<>))
35import Data.BEncode.Types 36import Data.BEncode.Types
36import Data.BEncode.BDict as BD 37import Data.BEncode.BDict as BD
37 38
39import GHC.Types
40import GHC.Integer.GMP.Internals
38 41
39{-------------------------------------------------------------------- 42{--------------------------------------------------------------------
40-- Serialization 43-- Serialization
41--------------------------------------------------------------------} 44--------------------------------------------------------------------}
42 45
46integerDecimal :: Integer -> B.Builder
47integerDecimal (S# i#) = B.intDec (I# i#)
48integerDecimal i = B.string7 (show i) -- TODO more efficient
49
43-- | BEncode format encoder according to specification. 50-- | BEncode format encoder according to specification.
44builder :: BValue -> B.Builder 51builder :: BValue -> B.Builder
45builder = go 52builder = go
46 where 53 where
47 go (BInteger i) = B.word8 (c2w 'i') <> 54 go (BInteger i) = B.word8 (c2w 'i') <>
48 B.integerDec i <> 55 integerDecimal i <>
49 B.word8 (c2w 'e') 56 B.word8 (c2w 'e')
50 go (BString s) = buildString s 57 go (BString s) = buildString s
51 go (BList l) = B.word8 (c2w 'l') <> 58 go (BList l) = B.word8 (c2w 'l') <>