packages feed

debug-print 0.2.0.1 → 0.2.1.0

raw patch · 3 files changed

+62/−15 lines, 3 filesdep +scientificPVP ok

version bump matches the API change (PVP)

Dependencies added: scientific

API changes (from Hackage documentation)

Files

CHANGELOG.md view
@@ -1,4 +1,17 @@-## [_Unreleased_](https://github.com/freckle/debug-print/compare/v0.2.0.1...main)+## [_Unreleased_](https://github.com/freckle/debug-print/compare/v0.2.1.0...main)++## [v0.2.1.0](https://github.com/freckle/debug-print/compare/v0.2.0.1...v0.2.1.0)++Add instances for `aeson` types:++- `instance ToDebugPrintValue Key`+- `instance ToDebugPrintValue Value`+- `instance ToDebugPrintValue Object`+- `instance ToDebugPrintRecord Object`++Adds `Eq` and `Ord` instances for `ToDebugPrintValue` and `ToDebugPrintRecord`++Add `instance ToDebugPrintValue DebugPrintRecord`  ## [v0.2.0.1](https://github.com/freckle/debug-print/compare/v0.2.0.0...v0.2.0.1) 
debug-print.cabal view
@@ -1,6 +1,6 @@ cabal-version:   2.0 name:            debug-print-version:         0.2.0.1+version:         0.2.1.0 license:         MIT license-file:    LICENSE maintainer:      Freckle Education@@ -32,9 +32,9 @@     autogen-modules:    Paths_debug_print     default-language:   GHC2021     default-extensions:-        DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors-        NoImplicitPrelude NoMonomorphismRestriction OverloadedStrings-        StrictData+        DefaultSignatures DeriveAnyClass DerivingVia LambdaCase+        NoFieldSelectors NoImplicitPrelude NoMonomorphismRestriction+        OverloadedStrings StrictData      ghc-options:         -Weverything -Wno-all-missed-specialisations@@ -59,9 +59,9 @@     autogen-modules:    Paths_debug_print     default-language:   GHC2021     default-extensions:-        DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors-        NoImplicitPrelude NoMonomorphismRestriction OverloadedStrings-        StrictData+        DefaultSignatures DeriveAnyClass DerivingVia LambdaCase+        NoFieldSelectors NoImplicitPrelude NoMonomorphismRestriction+        OverloadedStrings StrictData      ghc-options:         -Weverything -Wno-all-missed-specialisations@@ -69,8 +69,10 @@         -Wno-missing-safe-haskell-mode -Wno-safe -Wno-unsafe      build-depends:+        aeson >=2.1.2.1,         base >=4.17.2.1 && <5,         containers >=0.6.7,+        scientific >=0.3.7.0,         text >=2.0.2,         vector >=0.13.1.0 @@ -85,9 +87,9 @@     autogen-modules:    Paths_debug_print     default-language:   GHC2021     default-extensions:-        DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors-        NoImplicitPrelude NoMonomorphismRestriction OverloadedStrings-        StrictData+        DefaultSignatures DeriveAnyClass DerivingVia LambdaCase+        NoFieldSelectors NoImplicitPrelude NoMonomorphismRestriction+        OverloadedStrings StrictData      ghc-options:         -Weverything -Wno-all-missed-specialisations@@ -115,9 +117,9 @@     autogen-modules:    Paths_debug_print     default-language:   GHC2021     default-extensions:-        DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors-        NoImplicitPrelude NoMonomorphismRestriction OverloadedStrings-        StrictData+        DefaultSignatures DeriveAnyClass DerivingVia LambdaCase+        NoFieldSelectors NoImplicitPrelude NoMonomorphismRestriction+        OverloadedStrings StrictData      ghc-options:         -Weverything -Wno-all-missed-specialisations
internal/DebugPrint/Core.hs view
@@ -11,12 +11,16 @@  import Prelude +import Data.Aeson qualified as Aeson+import Data.Aeson.Key qualified as Aeson.Key+import Data.Aeson.KeyMap qualified as Aeson.KeyMap import Data.Foldable (toList) import Data.Int import Data.Kind (Type) import Data.List.NonEmpty (NonEmpty) import Data.Map (Map) import Data.Map.Strict qualified as Map+import Data.Scientific qualified as Scientific import Data.Sequence (Seq) import Data.String (IsString (..)) import Data.Text (Text)@@ -29,7 +33,7 @@ import Numeric.Natural (Natural)  newtype DebugPrintRecord = DebugPrintRecord (Map Text DebugPrintValue)-  deriving newtype (Monoid, Semigroup)+  deriving newtype (Eq, Monoid, Ord, Semigroup)  data DebugPrintValue   = DebugPrintValueInt Integer@@ -37,6 +41,7 @@   | DebugPrintValueBool Bool   | DebugPrintValueVector (Vector DebugPrintValue)   | DebugPrintValueRecord DebugPrintRecord+  deriving stock (Eq, Ord)  instance IsString DebugPrintValue where   fromString = DebugPrintValueText . T.pack@@ -52,6 +57,9 @@ instance ToDebugPrintValue DebugPrintValue where   toDebugPrintValue = id +instance ToDebugPrintValue DebugPrintRecord where+  toDebugPrintValue = DebugPrintValueRecord+ instance ToDebugPrintValue Integer where   toDebugPrintValue = DebugPrintValueInt @@ -94,6 +102,27 @@ instance ToDebugPrintValue a => ToDebugPrintValue (Vector a) where   toDebugPrintValue = DebugPrintValueVector . fmap toDebugPrintValue +instance ToDebugPrintValue Aeson.Key where+  toDebugPrintValue = DebugPrintValueText . Aeson.Key.toText++instance ToDebugPrintValue Aeson.Value where+  toDebugPrintValue = \case+    Aeson.Object x -> DebugPrintValueRecord $ toDebugPrintRecord x+    Aeson.Array x -> DebugPrintValueVector $ fmap toDebugPrintValue x+    Aeson.String x -> DebugPrintValueText $ T.unwords ["(string)", x]+    Aeson.Number x ->+      -- Since JSON numbers support scientific notation, an exponential form may+      -- represent an unreasonably large integer. Int64 is an arbitrary limit on+      -- the size of integer we're willing to expand.+      case Scientific.toBoundedInteger @Int64 x of+        Just i -> DebugPrintValueInt $ toInteger i+        Nothing -> DebugPrintValueText $ T.unwords ["(number)", T.pack $ show x]+    Aeson.Bool x -> DebugPrintValueBool x+    Aeson.Null -> DebugPrintValueText "(null)"++instance ToDebugPrintValue Aeson.Object where+  toDebugPrintValue = DebugPrintValueRecord . toDebugPrintRecord+ ---  class ToDebugPrintRecord a where@@ -104,6 +133,9 @@  instance ToDebugPrintRecord DebugPrintRecord where   toDebugPrintRecord = id++instance ToDebugPrintRecord Aeson.Object where+  toDebugPrintRecord = DebugPrintRecord . fmap toDebugPrintValue . Aeson.KeyMap.toMapText  ---