d10 1.0.1.0 → 1.0.1.1
raw patch · 3 files changed
+77/−73 lines, 3 filesdep ~basedep ~hashabledep ~hedgehogPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base, hashable, hedgehog, template-haskell
API changes (from Hackage documentation)
- D10.Char: charD10Either :: Char -> Either String D10
- D10.Char: charD10Fail :: MonadFail m => Char -> m D10
- D10.Char: charD10Maybe :: Char -> Maybe D10
- D10.Char: d10 :: QuasiQuoter
- D10.Char: d10Char :: D10 -> Char
- D10.Char: d10Exp :: Integer -> Q Exp
- D10.Char: d10Int :: D10 -> Int
- D10.Char: d10Integer :: D10 -> Integer
- D10.Char: d10ListExp :: String -> Q Exp
- D10.Char: d10ListPat :: String -> Q Pat
- D10.Char: d10Nat :: D10 -> Natural
- D10.Char: d10Num :: Num a => D10 -> a
- D10.Char: d10Pat :: Integer -> Q Pat
- D10.Char: d10Str :: D10 -> String
- D10.Char: d10list :: QuasiQuoter
- D10.Char: data D10
- D10.Char: intD10Either :: Int -> Either String D10
- D10.Char: intD10Fail :: MonadFail m => Int -> m D10
- D10.Char: intD10Maybe :: Int -> Maybe D10
- D10.Char: intMod10 :: Int -> D10
- D10.Char: integerD10Either :: Integer -> Either String D10
- D10.Char: integerD10Fail :: MonadFail m => Integer -> m D10
- D10.Char: integerD10Maybe :: Integer -> Maybe D10
- D10.Char: integerMod10 :: Integer -> D10
- D10.Char: integralD10Either :: Integral a => a -> Either String D10
- D10.Char: integralD10Fail :: (Integral a, MonadFail m) => a -> m D10
- D10.Char: integralD10Maybe :: Integral a => a -> Maybe D10
- D10.Char: integralMod10 :: Integral a => a -> D10
- D10.Char: natD10Either :: Natural -> Either String D10
- D10.Char: natD10Fail :: MonadFail m => Natural -> m D10
- D10.Char: natD10Maybe :: Natural -> Maybe D10
- D10.Char: natMod10 :: Natural -> D10
- D10.Char: strD10Either :: String -> Either String D10
- D10.Char: strD10Fail :: MonadFail m => String -> m D10
- D10.Char: strD10ListEither :: String -> Either String [D10]
- D10.Char: strD10ListFail :: MonadFail m => String -> m [D10]
- D10.Char: strD10ListMaybe :: String -> Maybe [D10]
- D10.Char: strD10Maybe :: String -> Maybe D10
- D10.Char.Arithmetic: (*) :: D10 -> D10 -> D10
- D10.Char.Arithmetic: (+) :: D10 -> D10 -> D10
- D10.Char.Arithmetic: (-) :: D10 -> D10 -> D10
- D10.Char.Conversions: charD10Either :: Char -> Either String D10
- D10.Char.Conversions: charD10Fail :: MonadFail m => Char -> m D10
- D10.Char.Conversions: charD10Maybe :: Char -> Maybe D10
- D10.Char.Conversions: d10Char :: D10 -> Char
- D10.Char.Conversions: d10Int :: D10 -> Int
- D10.Char.Conversions: d10Integer :: D10 -> Integer
- D10.Char.Conversions: d10Nat :: D10 -> Natural
- D10.Char.Conversions: d10Num :: Num a => D10 -> a
- D10.Char.Conversions: d10Str :: D10 -> String
- D10.Char.Conversions: intD10Either :: Int -> Either String D10
- D10.Char.Conversions: intD10Fail :: MonadFail m => Int -> m D10
- D10.Char.Conversions: intD10Maybe :: Int -> Maybe D10
- D10.Char.Conversions: intMod10 :: Int -> D10
- D10.Char.Conversions: integerD10Either :: Integer -> Either String D10
- D10.Char.Conversions: integerD10Fail :: MonadFail m => Integer -> m D10
- D10.Char.Conversions: integerD10Maybe :: Integer -> Maybe D10
- D10.Char.Conversions: integerMod10 :: Integer -> D10
- D10.Char.Conversions: integralD10Either :: Integral a => a -> Either String D10
- D10.Char.Conversions: integralD10Fail :: (Integral a, MonadFail m) => a -> m D10
- D10.Char.Conversions: integralD10Maybe :: Integral a => a -> Maybe D10
- D10.Char.Conversions: integralMod10 :: Integral a => a -> D10
- D10.Char.Conversions: natD10Either :: Natural -> Either String D10
- D10.Char.Conversions: natD10Fail :: MonadFail m => Natural -> m D10
- D10.Char.Conversions: natD10Maybe :: Natural -> Maybe D10
- D10.Char.Conversions: natMod10 :: Natural -> D10
- D10.Char.Conversions: strD10Either :: String -> Either String D10
- D10.Char.Conversions: strD10Fail :: MonadFail m => String -> m D10
- D10.Char.Conversions: strD10ListEither :: String -> Either String [D10]
- D10.Char.Conversions: strD10ListFail :: MonadFail m => String -> m [D10]
- D10.Char.Conversions: strD10ListMaybe :: String -> Maybe [D10]
- D10.Char.Conversions: strD10Maybe :: String -> Maybe D10
- D10.Char.Quotes: d10 :: QuasiQuoter
- D10.Char.Quotes: d10list :: QuasiQuoter
- D10.Char.Splices: d10Exp :: Integer -> Q Exp
- D10.Char.Splices: d10ListExp :: String -> Q Exp
- D10.Char.Splices: d10ListPat :: String -> Q Pat
- D10.Char.Splices: d10Pat :: Integer -> Q Pat
- D10.Char.Type: data D10
- D10.Char.Unsafe: D10_Unsafe :: Char -> D10
- D10.Char.Unsafe: instance Data.Hashable.Class.Hashable D10.Char.Unsafe.D10
- D10.Char.Unsafe: instance GHC.Classes.Eq D10.Char.Unsafe.D10
- D10.Char.Unsafe: instance GHC.Classes.Ord D10.Char.Unsafe.D10
- D10.Char.Unsafe: instance GHC.Enum.Bounded D10.Char.Unsafe.D10
- D10.Char.Unsafe: instance GHC.Enum.Enum D10.Char.Unsafe.D10
- D10.Char.Unsafe: instance GHC.Show.Show D10.Char.Unsafe.D10
- D10.Char.Unsafe: newtype D10
- D10.Num: charD10Either :: Num a => Char -> Either String (D10 a)
- D10.Num: charD10Fail :: (Num a, MonadFail m) => Char -> m (D10 a)
- D10.Num: charD10Maybe :: Num a => Char -> Maybe (D10 a)
- D10.Num: d10 :: QuasiQuoter
- D10.Num: d10Char :: Integral a => D10 a -> Char
- D10.Num: d10Exp :: Integer -> Q Exp
- D10.Num: d10Int :: Integral a => D10 a -> Int
- D10.Num: d10Integer :: Integral a => D10 a -> Integer
- D10.Num: d10ListExp :: String -> Q Exp
- D10.Num: d10ListPat :: String -> Q Pat
- D10.Num: d10Nat :: Integral a => D10 a -> Natural
- D10.Num: d10Num :: (Integral b, Num a) => D10 b -> a
- D10.Num: d10Pat :: Integer -> Q Pat
- D10.Num: d10Str :: Integral a => D10 a -> String
- D10.Num: d10list :: QuasiQuoter
- D10.Num: data D10 a
- D10.Num: intD10Either :: Num a => Int -> Either String (D10 a)
- D10.Num: intD10Fail :: (Num a, MonadFail m) => Int -> m (D10 a)
- D10.Num: intD10Maybe :: Num a => Int -> Maybe (D10 a)
- D10.Num: intMod10 :: Num a => Int -> D10 a
- D10.Num: integerD10Either :: Num a => Integer -> Either String (D10 a)
- D10.Num: integerD10Fail :: (Num a, MonadFail m) => Integer -> m (D10 a)
- D10.Num: integerD10Maybe :: Num a => Integer -> Maybe (D10 a)
- D10.Num: integerMod10 :: Num a => Integer -> D10 a
- D10.Num: integralD10Either :: (Num b, Integral a) => a -> Either String (D10 b)
- D10.Num: integralD10Fail :: (Num b, Integral a, MonadFail m) => a -> m (D10 b)
- D10.Num: integralD10Maybe :: (Num b, Integral a) => a -> Maybe (D10 b)
- D10.Num: integralMod10 :: (Num b, Integral a) => a -> D10 b
- D10.Num: natD10Either :: Num a => Natural -> Either String (D10 a)
- D10.Num: natD10Fail :: (Num a, MonadFail m) => Natural -> m (D10 a)
- D10.Num: natD10Maybe :: Num a => Natural -> Maybe (D10 a)
- D10.Num: natMod10 :: Num a => Natural -> D10 a
- D10.Num: strD10Either :: Num a => String -> Either String (D10 a)
- D10.Num: strD10Fail :: (Num a, MonadFail m) => String -> m (D10 a)
- D10.Num: strD10ListEither :: Num a => String -> Either String [D10 a]
- D10.Num: strD10ListFail :: (Num a, MonadFail m) => String -> m [D10 a]
- D10.Num: strD10ListMaybe :: Num a => String -> Maybe [D10 a]
- D10.Num: strD10Maybe :: Num a => String -> Maybe (D10 a)
- D10.Num.Arithmetic: (*) :: Integral a => D10 a -> D10 a -> D10 a
- D10.Num.Arithmetic: (+) :: Integral a => D10 a -> D10 a -> D10 a
- D10.Num.Arithmetic: (-) :: Integral a => D10 a -> D10 a -> D10 a
- D10.Num.Conversions: charD10Either :: Num a => Char -> Either String (D10 a)
- D10.Num.Conversions: charD10Fail :: (Num a, MonadFail m) => Char -> m (D10 a)
- D10.Num.Conversions: charD10Maybe :: Num a => Char -> Maybe (D10 a)
- D10.Num.Conversions: d10Char :: Integral a => D10 a -> Char
- D10.Num.Conversions: d10Int :: Integral a => D10 a -> Int
- D10.Num.Conversions: d10Integer :: Integral a => D10 a -> Integer
- D10.Num.Conversions: d10Nat :: Integral a => D10 a -> Natural
- D10.Num.Conversions: d10Num :: (Integral b, Num a) => D10 b -> a
- D10.Num.Conversions: d10Str :: Integral a => D10 a -> String
- D10.Num.Conversions: intD10Either :: Num a => Int -> Either String (D10 a)
- D10.Num.Conversions: intD10Fail :: (Num a, MonadFail m) => Int -> m (D10 a)
- D10.Num.Conversions: intD10Maybe :: Num a => Int -> Maybe (D10 a)
- D10.Num.Conversions: intMod10 :: Num a => Int -> D10 a
- D10.Num.Conversions: integerD10Either :: Num a => Integer -> Either String (D10 a)
- D10.Num.Conversions: integerD10Fail :: (Num a, MonadFail m) => Integer -> m (D10 a)
- D10.Num.Conversions: integerD10Maybe :: Num a => Integer -> Maybe (D10 a)
- D10.Num.Conversions: integerMod10 :: Num a => Integer -> D10 a
- D10.Num.Conversions: integralD10Either :: (Num b, Integral a) => a -> Either String (D10 b)
- D10.Num.Conversions: integralD10Fail :: (Num b, Integral a, MonadFail m) => a -> m (D10 b)
- D10.Num.Conversions: integralD10Maybe :: (Num b, Integral a) => a -> Maybe (D10 b)
- D10.Num.Conversions: integralMod10 :: (Num b, Integral a) => a -> D10 b
- D10.Num.Conversions: natD10Either :: Num a => Natural -> Either String (D10 a)
- D10.Num.Conversions: natD10Fail :: (Num a, MonadFail m) => Natural -> m (D10 a)
- D10.Num.Conversions: natD10Maybe :: Num a => Natural -> Maybe (D10 a)
- D10.Num.Conversions: natMod10 :: Num a => Natural -> D10 a
- D10.Num.Conversions: strD10Either :: Num a => String -> Either String (D10 a)
- D10.Num.Conversions: strD10Fail :: (Num a, MonadFail m) => String -> m (D10 a)
- D10.Num.Conversions: strD10ListEither :: Num a => String -> Either String [D10 a]
- D10.Num.Conversions: strD10ListFail :: (Num a, MonadFail m) => String -> m [D10 a]
- D10.Num.Conversions: strD10ListMaybe :: Num a => String -> Maybe [D10 a]
- D10.Num.Conversions: strD10Maybe :: Num a => String -> Maybe (D10 a)
- D10.Num.Quotes: d10 :: QuasiQuoter
- D10.Num.Quotes: d10list :: QuasiQuoter
- D10.Num.Splices: d10Exp :: Integer -> Q Exp
- D10.Num.Splices: d10ListExp :: String -> Q Exp
- D10.Num.Splices: d10ListPat :: String -> Q Pat
- D10.Num.Splices: d10Pat :: Integer -> Q Pat
- D10.Num.Type: data D10 a
- D10.Num.Unsafe: D10_Unsafe :: a -> D10 a
- D10.Num.Unsafe: instance Data.Hashable.Class.Hashable a => Data.Hashable.Class.Hashable (D10.Num.Unsafe.D10 a)
- D10.Num.Unsafe: instance GHC.Classes.Eq a => GHC.Classes.Eq (D10.Num.Unsafe.D10 a)
- D10.Num.Unsafe: instance GHC.Classes.Ord a => GHC.Classes.Ord (D10.Num.Unsafe.D10 a)
- D10.Num.Unsafe: instance GHC.Num.Num a => GHC.Enum.Bounded (D10.Num.Unsafe.D10 a)
- D10.Num.Unsafe: instance GHC.Real.Integral a => GHC.Enum.Enum (D10.Num.Unsafe.D10 a)
- D10.Num.Unsafe: instance GHC.Real.Integral a => GHC.Show.Show (D10.Num.Unsafe.D10 a)
- D10.Num.Unsafe: newtype D10 a
- D10.Predicate: isD10Char :: Char -> Bool
- D10.Predicate: isD10Int :: Int -> Bool
- D10.Predicate: isD10Integer :: Integer -> Bool
- D10.Predicate: isD10Integral :: Integral a => a -> Bool
- D10.Predicate: isD10ListStr :: String -> Bool
- D10.Predicate: isD10Nat :: Natural -> Bool
- D10.Predicate: isD10Str :: String -> Bool
- D10.Safe: D0 :: D10
- D10.Safe: D1 :: D10
- D10.Safe: D2 :: D10
- D10.Safe: D3 :: D10
- D10.Safe: D4 :: D10
- D10.Safe: D5 :: D10
- D10.Safe: D6 :: D10
- D10.Safe: D7 :: D10
- D10.Safe: D8 :: D10
- D10.Safe: D9 :: D10
- D10.Safe: charD10Either :: Char -> Either String D10
- D10.Safe: charD10Fail :: MonadFail m => Char -> m D10
- D10.Safe: charD10Maybe :: Char -> Maybe D10
- D10.Safe: d10Char :: D10 -> Char
- D10.Safe: d10Int :: D10 -> Int
- D10.Safe: d10Integer :: D10 -> Integer
- D10.Safe: d10ListExp :: String -> Q Exp
- D10.Safe: d10ListPat :: String -> Q Pat
- D10.Safe: d10Nat :: D10 -> Natural
- D10.Safe: d10Num :: Num a => D10 -> a
- D10.Safe: d10Str :: D10 -> String
- D10.Safe: d10list :: QuasiQuoter
- D10.Safe: data D10
- D10.Safe: intD10Either :: Int -> Either String D10
- D10.Safe: intD10Fail :: MonadFail m => Int -> m D10
- D10.Safe: intD10Maybe :: Int -> Maybe D10
- D10.Safe: intMod10 :: Int -> D10
- D10.Safe: integerD10Either :: Integer -> Either String D10
- D10.Safe: integerD10Fail :: MonadFail m => Integer -> m D10
- D10.Safe: integerD10Maybe :: Integer -> Maybe D10
- D10.Safe: integerMod10 :: Integer -> D10
- D10.Safe: integralD10Either :: Integral a => a -> Either String D10
- D10.Safe: integralD10Fail :: (Integral a, MonadFail m) => a -> m D10
- D10.Safe: integralD10Maybe :: Integral a => a -> Maybe D10
- D10.Safe: integralMod10 :: Integral a => a -> D10
- D10.Safe: natD10Either :: Natural -> Either String D10
- D10.Safe: natD10Fail :: MonadFail m => Natural -> m D10
- D10.Safe: natD10Maybe :: Natural -> Maybe D10
- D10.Safe: natMod10 :: Natural -> D10
- D10.Safe: strD10Either :: String -> Either String D10
- D10.Safe: strD10Fail :: MonadFail m => String -> m D10
- D10.Safe: strD10ListEither :: String -> Either String [D10]
- D10.Safe: strD10ListFail :: MonadFail m => String -> m [D10]
- D10.Safe: strD10ListMaybe :: String -> Maybe [D10]
- D10.Safe: strD10Maybe :: String -> Maybe D10
- D10.Safe.Arithmetic: (*) :: D10 -> D10 -> D10
- D10.Safe.Arithmetic: (+) :: D10 -> D10 -> D10
- D10.Safe.Arithmetic: (-) :: D10 -> D10 -> D10
- D10.Safe.Conversions: charD10Either :: Char -> Either String D10
- D10.Safe.Conversions: charD10Fail :: MonadFail m => Char -> m D10
- D10.Safe.Conversions: charD10Maybe :: Char -> Maybe D10
- D10.Safe.Conversions: d10Char :: D10 -> Char
- D10.Safe.Conversions: d10Int :: D10 -> Int
- D10.Safe.Conversions: d10Integer :: D10 -> Integer
- D10.Safe.Conversions: d10Nat :: D10 -> Natural
- D10.Safe.Conversions: d10Num :: Num a => D10 -> a
- D10.Safe.Conversions: d10Str :: D10 -> String
- D10.Safe.Conversions: intD10Either :: Int -> Either String D10
- D10.Safe.Conversions: intD10Fail :: MonadFail m => Int -> m D10
- D10.Safe.Conversions: intD10Maybe :: Int -> Maybe D10
- D10.Safe.Conversions: intMod10 :: Int -> D10
- D10.Safe.Conversions: integerD10Either :: Integer -> Either String D10
- D10.Safe.Conversions: integerD10Fail :: MonadFail m => Integer -> m D10
- D10.Safe.Conversions: integerD10Maybe :: Integer -> Maybe D10
- D10.Safe.Conversions: integerMod10 :: Integer -> D10
- D10.Safe.Conversions: integralD10Either :: Integral a => a -> Either String D10
- D10.Safe.Conversions: integralD10Fail :: (Integral a, MonadFail m) => a -> m D10
- D10.Safe.Conversions: integralD10Maybe :: Integral a => a -> Maybe D10
- D10.Safe.Conversions: integralMod10 :: Integral a => a -> D10
- D10.Safe.Conversions: natD10Either :: Natural -> Either String D10
- D10.Safe.Conversions: natD10Fail :: MonadFail m => Natural -> m D10
- D10.Safe.Conversions: natD10Maybe :: Natural -> Maybe D10
- D10.Safe.Conversions: natMod10 :: Natural -> D10
- D10.Safe.Conversions: strD10Either :: String -> Either String D10
- D10.Safe.Conversions: strD10Fail :: MonadFail m => String -> m D10
- D10.Safe.Conversions: strD10ListEither :: String -> Either String [D10]
- D10.Safe.Conversions: strD10ListFail :: MonadFail m => String -> m [D10]
- D10.Safe.Conversions: strD10ListMaybe :: String -> Maybe [D10]
- D10.Safe.Conversions: strD10Maybe :: String -> Maybe D10
- D10.Safe.Quotes: d10list :: QuasiQuoter
- D10.Safe.Splices: d10ListExp :: String -> Q Exp
- D10.Safe.Splices: d10ListPat :: String -> Q Pat
- D10.Safe.Type: D0 :: D10
- D10.Safe.Type: D1 :: D10
- D10.Safe.Type: D2 :: D10
- D10.Safe.Type: D3 :: D10
- D10.Safe.Type: D4 :: D10
- D10.Safe.Type: D5 :: D10
- D10.Safe.Type: D6 :: D10
- D10.Safe.Type: D7 :: D10
- D10.Safe.Type: D8 :: D10
- D10.Safe.Type: D9 :: D10
- D10.Safe.Type: data D10
- D10.Safe.Type: instance Data.Data.Data D10.Safe.Type.D10
- D10.Safe.Type: instance Data.Hashable.Class.Hashable D10.Safe.Type.D10
- D10.Safe.Type: instance GHC.Classes.Eq D10.Safe.Type.D10
- D10.Safe.Type: instance GHC.Classes.Ord D10.Safe.Type.D10
- D10.Safe.Type: instance GHC.Enum.Bounded D10.Safe.Type.D10
- D10.Safe.Type: instance GHC.Enum.Enum D10.Safe.Type.D10
- D10.Safe.Type: instance GHC.Generics.Generic D10.Safe.Type.D10
- D10.Safe.Type: instance GHC.Show.Show D10.Safe.Type.D10
+ AssertQFails: qFails :: Show a => Q a -> PropertyT IO ()
+ Fallible: Fallible :: Either String a -> Fallible a
+ Fallible: instance Control.Monad.Fail.MonadFail Fallible.Fallible
+ Fallible: instance GHC.Base.Applicative Fallible.Fallible
+ Fallible: instance GHC.Base.Functor Fallible.Fallible
+ Fallible: instance GHC.Base.Monad Fallible.Fallible
+ Fallible: instance GHC.Classes.Eq a => GHC.Classes.Eq (Fallible.Fallible a)
+ Fallible: instance GHC.Show.Show a => GHC.Show.Show (Fallible.Fallible a)
+ Fallible: newtype Fallible a
Files
- changelog.md +7/−0
- d10.cabal +28/−73
- readme.md +42/−0
+ changelog.md view
@@ -0,0 +1,7 @@+### 1.0.1.1 (2023-01-02)++Support GHC 9.4++### 1.0.1.0 (2022-03-22)++Start of changelog
d10.cabal view
@@ -1,58 +1,16 @@ cabal-version: 3.0 name: d10-version: 1.0.1.0+version: 1.0.1.1 category: Data synopsis: Digits 0-9 description: Data types representing the digits zero through nine. - == Modules- Each of the following modules defines a different type named @D10@, all of which are different representations of the same- concept:-- * "D10.Char" - Defines a @D10@ type as a newtype for @Char@,- where the values are restricted to characters between- @'0'@ and @'9'@- * "D10.Num" - Defines a @D10@ type as a newtype for any- type with an instance of the @Num@ class, where the values- are restricted to numbers between @fromInteger 0@ and- @fromInteger 9@- * "D10.Safe" - Defines a @D10@ type as @D0 | D1 | D2 | ... | D9@-- The @Arithmetic@ modules provide infix operators (@+@), (@-@), (@*@)- for modular arithmetic:-- * "D10.Char.Arithmetic"- * "D10.Num.Arithmetic"- * "D10.Safe.Arithmetic"-- The following modules export constructors that can be used- incorrectly:-- * "D10.Char.Unsafe"- * "D10.Num.Unsafe"-- Functions to test whether values of various types represent- digits in the range 0 to 9:-- * "D10.Predicate"-- == Quasi-quoters-- * The "D10.Char" and "D10.Num" modules include quasi-quoters- named @d10@ used to express single digits. For example, 7- can be written as @[d10|7|]@. This is an important feature- because the @D10@ types defined in these modules have- unsafe constructors, and the quasi-quoters provide- compile-time assurance that we never construct a @D10@- that represents a value outside the range 0 to 9.- * "D10.Char", "D10.Num", and "D10.Safe" include quasi-quoters- named @d10list@ to express lists of digits. For example,- [4, 5, 6] can be written as @[d10list|456|]@.+ concept "D10.Char", "D10.Num", "D10.Safe". homepage: https://github.com/typeclasses/d10 bug-reports: https://github.com/typeclasses/d10/issues@@ -64,7 +22,7 @@ license: MIT license-file: license.txt -build-type: Simple+extra-source-files: *.md source-repository head type: git@@ -80,12 +38,9 @@ common library-dependencies build-depends:- base ^>= 4.13 || ^>= 4.14 || ^>= 4.15- || ^>= 4.16- , hashable ^>= 1.3 || ^>= 1.4- , template-haskell- ^>= 2.15 || ^>= 2.16 || ^>= 2.17- || ^>= 2.18+ base ^>= 4.14 || ^>= 4.15 || ^>= 4.16 || ^>= 4.17+ , hashable ^>= 1.3.5 || ^>= 1.4+ , template-haskell ^>= 2.16 || ^>= 2.17 || ^>= 2.18 || ^>= 2.19 common test-language import: language@@ -97,7 +52,7 @@ import: library-dependencies build-depends: d10- , hedgehog ^>= 1.0.1 || ^>= 1.1+ , hedgehog ^>= 1.0.5 || ^>= 1.1 || ^>= 1.2 common test import: test-language@@ -112,26 +67,26 @@ hs-source-dirs: src exposed-modules: D10.Char- , D10.Char.Arithmetic- , D10.Char.Conversions- , D10.Char.Quotes- , D10.Char.Splices- , D10.Char.Type- , D10.Char.Unsafe- , D10.Num- , D10.Num.Arithmetic- , D10.Num.Conversions- , D10.Num.Quotes- , D10.Num.Splices- , D10.Num.Type- , D10.Num.Unsafe- , D10.Safe- , D10.Safe.Arithmetic- , D10.Safe.Conversions- , D10.Safe.Quotes- , D10.Safe.Splices- , D10.Safe.Type- , D10.Predicate+ D10.Char.Arithmetic+ D10.Char.Conversions+ D10.Char.Quotes+ D10.Char.Splices+ D10.Char.Type+ D10.Char.Unsafe+ D10.Num+ D10.Num.Arithmetic+ D10.Num.Conversions+ D10.Num.Quotes+ D10.Num.Splices+ D10.Num.Type+ D10.Num.Unsafe+ D10.Safe+ D10.Safe.Arithmetic+ D10.Safe.Conversions+ D10.Safe.Quotes+ D10.Safe.Splices+ D10.Safe.Type+ D10.Predicate library d10-test import: test-language@@ -139,7 +94,7 @@ hs-source-dirs: library/d10-test exposed-modules: AssertQFails- , Fallible+ Fallible test-suite char import: test
+ readme.md view
@@ -0,0 +1,42 @@+Data types representing the digits zero through nine.++## Modules++Each of the following modules defines a different type named `D10`, all of which+are different representations of the same concept:++* `D10.Char` - Defines a `D10` type as a newtype for `Char`, where the values+ are restricted to characters between `'0'` and `'9'`.++* `D10.Num` - Defines a `D10` type as a newtype for any type with an instance of+ the `Num` class, where the values are restricted to numbers between `fromInteger+ 0` and `fromInteger 9`.++* `D10.Safe` - Defines a `D10` type as `D0 | D1 | D2 | ... | D9`.++The `Arithmetic` modules provide infix operators `(+)`, `(-)`, `(*)` for modular+arithmetic:++* `D10.Char.Arithmetic`+* `D10.Num.Arithmetic`+* `D10.Safe.Arithmetic`++The following modules export constructors that can be used incorrectly:++* `D10.Char.Unsafe`+* `D10.Num.Unsafe`++Functions to test whether values of various types represent digits in the range+0 to 9:++* `D10.Predicate`++## Quasi-quoters++Each module that defines a `D10` type also defines quasi-quoters for it. With+the `QuasiQuotes` GHC extension enabled, a single digit like *7* can be written+as `[d10|7|]`, and a list of digits like *[4,5,6]* can be written as+`[d10|456|]`. For `D10.Char` and `D10.Num`, the quasi-quoters are an important+feature, because the `D10` types defined in these modules have unsafe+constructors, and the quasi-quoters provide compile-time assurance that we never+construct a `D10` that represents a value outside the range *0* to *9*.