debug-print 0.0.0.0 → 0.1.0.0
raw patch · 7 files changed
+205/−133 lines, 7 files
Files
- CHANGELOG.md +9/−1
- debug-print.cabal +31/−2
- internal/DebugPrint/Core.hs +157/−0
- library/DebugPrint/Class.hs +1/−98
- library/DebugPrint/Integer.hs +5/−0
- library/DebugPrint/Show.hs +1/−12
- library/DebugPrint/Types.hs +1/−20
CHANGELOG.md view
@@ -1,4 +1,12 @@-## [_Unreleased_](https://github.com/freckle/debug-print/compare/v0.0.0.0...main)+## [_Unreleased_](https://github.com/freckle/debug-print/compare/v0.1.0.0...main)++## [v0.1.0.0](https://github.com/freckle/nonempty-zipper/compare/v0.0.0.0...v0.1.0.0)++The parameter of `DebugPrintValueInt` is changed from `Int` to `Integer`.++Added `ToDebugPrintValue` instances for various numeric types.++Adds the `DebugInteger` newtype for deriving-via. ## [v0.0.0.0](https://github.com/freckle/debug-print/tree/v0.0.0.0)
debug-print.cabal view
@@ -1,6 +1,6 @@-cabal-version: 1.18+cabal-version: 2.0 name: debug-print-version: 0.0.0.0+version: 0.1.0.0 license: MIT license-file: LICENSE maintainer: Freckle Education@@ -22,12 +22,14 @@ DebugPrint DebugPrint.Aeson DebugPrint.Class+ DebugPrint.Integer DebugPrint.Show DebugPrint.Tagged DebugPrint.Types hs-source-dirs: library other-modules: Paths_debug_print+ autogen-modules: Paths_debug_print default-language: GHC2021 default-extensions: DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors@@ -43,6 +45,32 @@ aeson >=2.2.3.0, base >=4.19.2.0 && <5, containers >=0.6.8,+ internal,+ text >=2.1.1++ if impl(ghc >=9.8)+ ghc-options:+ -Wno-missing-role-annotations -Wno-missing-poly-kind-signatures++library internal+ exposed-modules: DebugPrint.Core+ hs-source-dirs: internal+ other-modules: Paths_debug_print+ autogen-modules: Paths_debug_print+ default-language: GHC2021+ default-extensions:+ DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors+ NoImplicitPrelude NoMonomorphismRestriction OverloadedStrings+ StrictData++ ghc-options:+ -Weverything -Wno-all-missed-specialisations+ -Wno-missing-import-lists -Wno-missing-kind-signatures+ -Wno-missing-safe-haskell-mode -Wno-safe -Wno-unsafe++ build-depends:+ base >=4.19.2.0 && <5,+ containers >=0.6.8, text >=2.1.1, vector >=0.13.2.0 @@ -54,6 +82,7 @@ type: exitcode-stdio-1.0 main-is: README.lhs other-modules: Paths_debug_print+ autogen-modules: Paths_debug_print default-language: GHC2021 default-extensions: DefaultSignatures DeriveAnyClass DerivingVia NoFieldSelectors
+ internal/DebugPrint/Core.hs view
@@ -0,0 +1,157 @@+module DebugPrint.Core+ ( DebugPrintRecord (..)+ , DebugPrintValue (..)+ , ToDebugPrintValue (..)+ , ToDebugPrintRecord (..)+ , ToDebugPrintValueRep+ , ToDebugPrintRecordRep+ , DebugInteger (..)+ , DebugShow (..)+ ) where++import Prelude++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.Sequence (Seq)+import Data.String (IsString (..))+import Data.Text (Text)+import Data.Text qualified as T+import Data.Text.Lazy qualified as TL+import Data.Vector (Vector)+import Data.Vector qualified as V+import Data.Word+import GHC.Generics+import Numeric.Natural (Natural)++newtype DebugPrintRecord = DebugPrintRecord (Map Text DebugPrintValue)+ deriving newtype (Monoid, Semigroup)++data DebugPrintValue+ = DebugPrintValueInt Integer+ | DebugPrintValueText Text+ | DebugPrintValueBool Bool+ | DebugPrintValueVector (Vector DebugPrintValue)+ | DebugPrintValueRecord DebugPrintRecord++instance IsString DebugPrintValue where+ fromString = DebugPrintValueText . T.pack++---++class ToDebugPrintValue a where+ toDebugPrintValue :: a -> DebugPrintValue+ default toDebugPrintValue+ :: (Generic a, ToDebugPrintRecordRep (Rep a)) => a -> DebugPrintValue+ toDebugPrintValue = DebugPrintValueRecord . gToRecord . from++instance ToDebugPrintValue DebugPrintValue where+ toDebugPrintValue = id++instance ToDebugPrintValue Integer where+ toDebugPrintValue = DebugPrintValueInt++deriving via DebugInteger (Natural) instance ToDebugPrintValue Natural+deriving via DebugInteger (Int) instance ToDebugPrintValue Int+deriving via DebugInteger (Int8) instance ToDebugPrintValue Int8+deriving via DebugInteger (Int16) instance ToDebugPrintValue Int16+deriving via DebugInteger (Int32) instance ToDebugPrintValue Int32+deriving via DebugInteger (Int64) instance ToDebugPrintValue Int64+deriving via DebugInteger (Word) instance ToDebugPrintValue Word+deriving via DebugInteger (Word8) instance ToDebugPrintValue Word8+deriving via DebugInteger (Word16) instance ToDebugPrintValue Word16+deriving via DebugInteger (Word32) instance ToDebugPrintValue Word32+deriving via DebugInteger (Word64) instance ToDebugPrintValue Word64++instance ToDebugPrintValue Char where+ toDebugPrintValue = DebugPrintValueText . T.singleton++instance ToDebugPrintValue T.Text where+ toDebugPrintValue = DebugPrintValueText++instance ToDebugPrintValue TL.Text where+ toDebugPrintValue = DebugPrintValueText . TL.toStrict++instance ToDebugPrintValue Bool where+ toDebugPrintValue = DebugPrintValueBool++instance ToDebugPrintValue a => ToDebugPrintValue (Maybe a) where+ toDebugPrintValue = toDebugPrintValue . toList++instance ToDebugPrintValue a => ToDebugPrintValue [a] where+ toDebugPrintValue = toDebugPrintValue . V.fromList++instance ToDebugPrintValue a => ToDebugPrintValue (NonEmpty a) where+ toDebugPrintValue = toDebugPrintValue . toList++instance ToDebugPrintValue a => ToDebugPrintValue (Seq a) where+ toDebugPrintValue = toDebugPrintValue . toList++instance ToDebugPrintValue a => ToDebugPrintValue (Vector a) where+ toDebugPrintValue = DebugPrintValueVector . fmap toDebugPrintValue++---++class ToDebugPrintRecord a where+ toDebugPrintRecord :: a -> DebugPrintRecord+ default toDebugPrintRecord+ :: (Generic a, ToDebugPrintRecordRep (Rep a)) => a -> DebugPrintRecord+ toDebugPrintRecord = gToRecord . from++instance ToDebugPrintRecord DebugPrintRecord where+ toDebugPrintRecord = id++---++class ToDebugPrintValueRep (f :: Type -> Type) where+ gToValue :: f a -> DebugPrintValue++instance ToDebugPrintValue a => ToDebugPrintValueRep (K1 i a) where+ gToValue (K1 x) = toDebugPrintValue x++---++class ToDebugPrintRecordRep (f :: Type -> Type) where+ gToRecord :: f a -> DebugPrintRecord++instance ToDebugPrintRecordRep U1 where+ gToRecord _ = DebugPrintRecord mempty++instance+ (ToDebugPrintRecordRep f, ToDebugPrintRecordRep g)+ => ToDebugPrintRecordRep (f :*: g)+ where+ gToRecord (x :*: y) = gToRecord x <> gToRecord y++instance ToDebugPrintRecordRep f => ToDebugPrintRecordRep (D1 i f) where+ gToRecord (M1 x) = gToRecord x++instance ToDebugPrintRecordRep f => ToDebugPrintRecordRep (C1 i f) where+ gToRecord (M1 x) = gToRecord x++instance (Selector s, ToDebugPrintValueRep f) => ToDebugPrintRecordRep (S1 s f) where+ gToRecord s1@(M1 x) = DebugPrintRecord $ Map.singleton (T.pack (selName s1)) (gToValue x)++---++-- | For use with deriving-via, provides a simple 'ToDebugPrintValue'+-- instance based on 'Show' which renders as text+newtype DebugShow a = DebugShow a++instance Show a => ToDebugPrintValue (DebugShow a) where+ toDebugPrintValue (DebugShow x) =+ toDebugPrintValue $ T.pack $ show x++---++-- | For use with deriving-via, provides a simple 'ToDebugPrintValue'+-- instance based on 'toInteger' which renders as an integer+newtype DebugInteger a = DebugInteger a++instance Integral a => ToDebugPrintValue (DebugInteger a) where+ toDebugPrintValue (DebugInteger x) =+ toDebugPrintValue $ toInteger x
library/DebugPrint/Class.hs view
@@ -9,101 +9,4 @@ , ToDebugPrintRecordRep ) where -import Prelude--import Data.Foldable (toList)-import Data.Kind (Type)-import Data.List.NonEmpty (NonEmpty)-import Data.Map.Strict qualified as Map-import Data.Sequence (Seq)-import Data.Text qualified as T-import Data.Text.Lazy qualified as TL-import Data.Vector (Vector)-import Data.Vector qualified as V-import DebugPrint.Types-import GHC.Generics-import Numeric.Natural (Natural)--class ToDebugPrintValue a where- toDebugPrintValue :: a -> DebugPrintValue- default toDebugPrintValue- :: (Generic a, ToDebugPrintRecordRep (Rep a)) => a -> DebugPrintValue- toDebugPrintValue = DebugPrintValueRecord . gToRecord . from--instance ToDebugPrintValue DebugPrintValue where- toDebugPrintValue = id--instance ToDebugPrintValue Int where- toDebugPrintValue = DebugPrintValueInt--instance ToDebugPrintValue Char where- toDebugPrintValue = DebugPrintValueText . T.singleton--instance ToDebugPrintValue Natural where- toDebugPrintValue = DebugPrintValueInt . fromIntegral--instance ToDebugPrintValue T.Text where- toDebugPrintValue = DebugPrintValueText--instance ToDebugPrintValue TL.Text where- toDebugPrintValue = DebugPrintValueText . TL.toStrict--instance ToDebugPrintValue Bool where- toDebugPrintValue = DebugPrintValueBool--instance ToDebugPrintValue a => ToDebugPrintValue (Maybe a) where- toDebugPrintValue = toDebugPrintValue . toList--instance ToDebugPrintValue a => ToDebugPrintValue [a] where- toDebugPrintValue = toDebugPrintValue . V.fromList--instance ToDebugPrintValue a => ToDebugPrintValue (NonEmpty a) where- toDebugPrintValue = toDebugPrintValue . toList--instance ToDebugPrintValue a => ToDebugPrintValue (Seq a) where- toDebugPrintValue = toDebugPrintValue . toList--instance ToDebugPrintValue a => ToDebugPrintValue (Vector a) where- toDebugPrintValue = DebugPrintValueVector . fmap toDebugPrintValue-------class ToDebugPrintRecord a where- toDebugPrintRecord :: a -> DebugPrintRecord- default toDebugPrintRecord- :: (Generic a, ToDebugPrintRecordRep (Rep a)) => a -> DebugPrintRecord- toDebugPrintRecord = gToRecord . from--instance ToDebugPrintRecord DebugPrintRecord where- toDebugPrintRecord = id-------class ToDebugPrintValueRep (f :: Type -> Type) where- gToValue :: f a -> DebugPrintValue--instance ToDebugPrintValue a => ToDebugPrintValueRep (K1 i a) where- gToValue (K1 x) = toDebugPrintValue x-------class ToDebugPrintRecordRep (f :: Type -> Type) where- gToRecord :: f a -> DebugPrintRecord--instance ToDebugPrintRecordRep U1 where- gToRecord _ = DebugPrintRecord mempty--instance- (ToDebugPrintRecordRep f, ToDebugPrintRecordRep g)- => ToDebugPrintRecordRep (f :*: g)- where- gToRecord (x :*: y) = gToRecord x <> gToRecord y--instance ToDebugPrintRecordRep f => ToDebugPrintRecordRep (D1 i f) where- gToRecord (M1 x) = gToRecord x--instance ToDebugPrintRecordRep f => ToDebugPrintRecordRep (C1 i f) where- gToRecord (M1 x) = gToRecord x--instance (Selector s, ToDebugPrintValueRep f) => ToDebugPrintRecordRep (S1 s f) where- gToRecord s1@(M1 x) = DebugPrintRecord $ Map.singleton (T.pack (selName s1)) (gToValue x)+import DebugPrint.Core
+ library/DebugPrint/Integer.hs view
@@ -0,0 +1,5 @@+module DebugPrint.Integer+ ( DebugInteger (..)+ ) where++import DebugPrint.Core
library/DebugPrint/Show.hs view
@@ -2,15 +2,4 @@ ( DebugShow (..) ) where -import Prelude--import Data.Text qualified as T-import DebugPrint.Class---- | For use with deriving-via, provides a simple 'ToDebugPrintValue'--- instance based on 'Show' which renders as text-newtype DebugShow a = DebugShow a--instance Show a => ToDebugPrintValue (DebugShow a) where- toDebugPrintValue (DebugShow x) =- toDebugPrintValue $ T.pack $ show x+import DebugPrint.Core
library/DebugPrint/Types.hs view
@@ -7,23 +7,4 @@ , DebugPrintValue (..) ) where -import Prelude--import Data.Map (Map)-import Data.String (IsString (..))-import Data.Text (Text)-import Data.Text qualified as T-import Data.Vector (Vector)--newtype DebugPrintRecord = DebugPrintRecord (Map Text DebugPrintValue)- deriving newtype (Monoid, Semigroup)--data DebugPrintValue- = DebugPrintValueInt Int- | DebugPrintValueText Text- | DebugPrintValueBool Bool- | DebugPrintValueVector (Vector DebugPrintValue)- | DebugPrintValueRecord DebugPrintRecord--instance IsString DebugPrintValue where- fromString = DebugPrintValueText . T.pack+import DebugPrint.Core