serokell-util 0.9.0 → 0.10.0
raw patch · 8 files changed
+49/−64 lines, 8 filesdep −text-formatdep ~formattingdep ~o-clockdep ~universum
Dependencies removed: text-format
Dependency ranges changed: formatting, o-clock, universum
Files
- serokell-util.cabal +9/−6
- src/Serokell/Data/Variant/Serialization.hs +3/−1
- src/Serokell/Data/Variant/Variant.hs +8/−8
- src/Serokell/Util/Bench.hs +13/−5
- src/Serokell/Util/Exceptions.hs +4/−5
- src/Serokell/Util/Text.hs +8/−37
- test/Test/Serokell/Data/Variant/VariantSpec.hs +2/−1
- test/Test/Serokell/Util/TextSpec.hs +2/−1
serokell-util.cabal view
@@ -1,5 +1,5 @@ name: serokell-util-version: 0.9.0+version: 0.10.0 synopsis: General-purpose functions by Serokell homepage: https://github.com/serokell/serokell-util license: MIT@@ -16,6 +16,9 @@ functions from existing projects and don't want to copy-paste them. cabal-version: >=2.0+tested-with: GHC == 8.0.2+ , GHC == 8.2.2+ , GHC == 8.4.3 library hs-source-dirs: src@@ -58,12 +61,12 @@ , deepseq , exceptions , fmt- , formatting >= 6.2.0 && < 6.3+ , formatting ^>= 6.3.4 , hashable >= 1.2.4.0 , microlens , microlens-mtl , mtl- , o-clock ^>= 0.1.1+ , o-clock ^>= 1.0.0 , parsec , process , QuickCheck >= 2.8.1@@ -71,10 +74,9 @@ , scientific , template-haskell , text- , text-format , th-lift-instances , transformers- , universum ^>= 1.1.0+ , universum ^>= 1.2.0 , unordered-containers >= 0.2.7.0 , vector @@ -104,12 +106,13 @@ build-depends: aeson >= 1.0 && < 1.4 , base >=4.8 , extra >= 1.6+ , formatting ^>= 6.3.4 , hspec >= 2.1.10 , QuickCheck >= 2.8.1 , quickcheck-instances , scientific , serokell-util- , universum ^>= 1.1.0+ , universum ^>= 1.2.0 , unordered-containers >= 0.2.7.0 , vector hs-source-dirs: test
src/Serokell/Data/Variant/Serialization.hs view
@@ -10,6 +10,7 @@ import Universum import Data.Scientific (floatingOrInteger)+import Formatting (build, sformat) import Serokell.Data.Variant.Variant (VarMap, Variant (..)) import Serokell.Util.Base64 (JsonByteString (JsonByteString))@@ -32,7 +33,8 @@ -- result type depends on sign (negative ⇒ Int, otherwise UInt). varMapToObject :: VarMap -> Aeson.Object-varMapToObject = HM.fromList . map (bimap pretty Aeson.toJSON) . toPairs+varMapToObject =+ HM.fromList . map (bimap (sformat build) Aeson.toJSON) . toPairs instance Aeson.ToJSON Variant where toJSON VarNone = Aeson.Null
src/Serokell/Data/Variant/Variant.hs view
@@ -12,7 +12,7 @@ import Universum -import Data.Text.Buildable (Buildable (build))+import qualified Formatting.Buildable as B import GHC.Exts (IsList (..)) import Serokell.Util.Text (listBuilderJSONIndent, mapBuilder)@@ -37,14 +37,14 @@ | VarMap !VarMap -- ^ Map (with unique keys) from Variant to Variant. deriving (Show,Eq,Generic) -instance Buildable Variant where+instance B.Buildable Variant where build VarNone = "None"- build (VarBool v) = build v- build (VarInt v) = build v- build (VarUInt v) = build v- build (VarFloat v) = build v- build (VarBytes v) = build . B16.encode $ v- build (VarString v) = build v+ build (VarBool v) = B.build v+ build (VarInt v) = B.build v+ build (VarUInt v) = B.build v+ build (VarFloat v) = B.build v+ build (VarBytes v) = B.build . B16.encode $ v+ build (VarString v) = B.build v build (VarList v) = listBuilderJSONIndent 2 v build (VarMap v) = mapBuilder . toPairs $ v
src/Serokell/Util/Bench.hs view
@@ -1,5 +1,6 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE ExplicitForAll #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE MonoLocalBinds #-} {-# LANGUAGE ScopedTypeVariables #-} -- | Benchmark related utils.@@ -17,17 +18,24 @@ import Fmt (Buildable (build), (+||), (||+)) import System.Clock (Clock (..), TimeSpec, diffTimeSpec, getTime, toNanoSecs)-import Time (KnownRat, Time, ns, toUnit)+import Time (KnownDivRat, Nanosecond, Time, ns, toUnit) -- | Get current wall-clock time as any time unit.-getWallTime :: forall unit m . (MonadIO m, KnownRat unit) => m (Time unit)+getWallTime ::+ forall unit m. (MonadIO m, KnownDivRat Nanosecond unit)+ => m (Time unit) getWallTime = timeSpecToUnit <$> getTime' Realtime -- | Get current CPU time as any time unit.-getCpuTime :: forall unit m . (MonadIO m, KnownRat unit) => m (Time unit)+getCpuTime ::+ forall unit m. (MonadIO m, KnownDivRat Nanosecond unit)+ => m (Time unit) getCpuTime = timeSpecToUnit <$> getTime' ProcessCPUTime -timeSpecToUnit :: forall unit . KnownRat unit => TimeSpec -> Time unit+timeSpecToUnit ::+ forall unit. KnownDivRat Nanosecond unit+ => TimeSpec+ -> Time unit timeSpecToUnit = toUnit @unit . ns . fromIntegral . toNanoSecs -- | Data type describing time passed during execution of something.
src/Serokell/Util/Exceptions.hs view
@@ -17,10 +17,9 @@ import Formatting (bprint, stext, string, (%)) import qualified Control.Monad as Monad-import qualified Data.Text.Buildable-import qualified Data.Text.Format as F+import qualified Formatting.Buildable -instance Buildable SomeException where+instance Formatting.Buildable.Buildable SomeException where build e = case fromException e of Nothing -> bprint string (displayException e)@@ -33,8 +32,8 @@ instance Exception TextException -instance Buildable TextException where- build = F.build "TextException: {}" . F.Only . teMessage+instance Formatting.Buildable.Buildable TextException where+ build = bprint ("TextException: " %stext) . teMessage throwText :: MonadThrow m => Text -> m a
src/Serokell/Util/Text.hs view
@@ -35,13 +35,6 @@ , mapBuilder , mapBuilderJson - -- * @text-format@ utilities- , format- , format'- , formatSingle- , formatSingle'- , buildSingle- -- * String readers , readFractional , readDouble@@ -51,21 +44,21 @@ import Prelude -import Data.Text.Buildable (Buildable (build))-import Data.Text.Format.Params (Params) import Data.Text.Lazy.Builder.RealFloat (FPFormat (Exponent, Fixed, Generic))+import Formatting (bprint, (%)) import Formatting (Format, fixed, later, sformat)+import Formatting.Buildable (Buildable (build)) import GHC.Exts (IsList (..)) import Serokell.Util.Common (chunksOf) import qualified Data.Text as T-import qualified Data.Text.Format as F import qualified Data.Text.Lazy as LT import qualified Data.Text.Lazy.Builder as B import qualified Data.Text.Lazy.Builder.Int as B import qualified Data.Text.Lazy.Builder.RealFloat as B import qualified Data.Text.Read as T+import qualified Formatting.Formatters as F import qualified Universum as U -- | Render a floating point number using normal notation, with the@@ -126,13 +119,14 @@ pairBuilder :: (Buildable a, Buildable b) => (a, b) -> B.Builder-pairBuilder = F.build "({}, {})"+pairBuilder (a, b) = bprint ("(" % F.build % ", " % F.build % ")") a b -- | Prints triple (a, b, c) like "(a, b, c)" tripleBuilder :: (Buildable a, Buildable b, Buildable c) => (a, b, c) -> B.Builder-tripleBuilder = F.build "({}, {}, {})"+tripleBuilder (a, b, c) =+ bprint ("("%F.build%", "%F.build%", "%F.build%")") a b c -- | Generic list builder. Prints prefix, then values separated by delimiter and finally suffix listBuilder@@ -202,31 +196,8 @@ mapBuilderJson :: (IsList t, Item t ~ (k, v), Buildable k, Buildable v) => t -> B.Builder-mapBuilderJson = _listBuilder "{" ", " "}" . map (F.build "{}: {}") . toList--{-# DEPRECATED format, format', formatSingle, formatSingle' "Not typesafe. Use formatting library instead" #-}---- | Re-export Data.Text.Format.format for convenience-format :: Params ps- => F.Format -> ps -> LT.Text-format = F.format---- | Version of Data.Text.Format.format which returns strict Text-format' :: Params ps- => F.Format -> ps -> T.Text-format' f = LT.toStrict . F.format f--formatSingle :: Buildable a- => F.Format -> a -> LT.Text-formatSingle f = format f . F.Only--formatSingle' :: Buildable a- => F.Format -> a -> T.Text-formatSingle' f = LT.toStrict . formatSingle f--buildSingle :: Buildable a- => F.Format -> a -> B.Builder-buildSingle f = F.build f . F.Only+mapBuilderJson = _listBuilder "{" ", " "}" .+ map (\(a, b) -> bprint (F.build % ": " % F.build) a b) . toList -- | Read fractional number. Returns error (i. e. Left) if there is something else readFractional :: Fractional a => T.Text -> Either String a
test/Test/Serokell/Data/Variant/VariantSpec.hs view
@@ -8,6 +8,7 @@ import Universum import Data.Scientific (floatingOrInteger, fromFloatDigits)+import Formatting (build, sformat) import Test.Hspec (Spec, describe) import Test.Hspec.QuickCheck (prop) import Test.QuickCheck ((===))@@ -46,7 +47,7 @@ jsonFixer v = v toStr :: S.Variant -> S.Variant-toStr = S.VarString . pretty+toStr = S.VarString . sformat build jsonMid :: S.Variant -> S.Variant jsonMid = maybe err id . A.decode . A.encode
test/Test/Serokell/Util/TextSpec.hs view
@@ -7,6 +7,7 @@ import Universum +import Formatting (Buildable, build, sformat) import Test.Hspec (Spec, describe) import Test.Hspec.QuickCheck (prop) import Test.QuickCheck ((===))@@ -31,4 +32,4 @@ \(a :: Word64) -> Right a === showReadIntegral a showReadIntegral :: (Buildable a, Integral a) => a -> Either String a-showReadIntegral = S.readDecimal . pretty+showReadIntegral = S.readDecimal . sformat build