dependent-literals 0.1.0.0 → 0.1.1.0
raw patch · 3 files changed
+70/−58 lines, 3 filesdep +wrappedPVP ok
version bump matches the API change (PVP)
Dependencies added: wrapped
API changes (from Hackage documentation)
+ DependentLiterals.Int: instance (GHC.Classes.Eq a, GHC.Num.Num a) => DependentLiterals.Int.HasIntLiterals (Data.Wrapped.Wrapped GHC.Num.Num a)
Files
- CHANGELOG.md +4/−0
- dependent-literals.cabal +3/−2
- src/DependentLiterals/Int.hs +63/−56
CHANGELOG.md view
@@ -1,3 +1,7 @@ # 0.1.0.0 Initial version.++# 0.1.1.0++* Moved the `StockLit` instance to `Wrapped Num` (kept `StockLit` as a newtype).
dependent-literals.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 30f8fe2e48f6bbcd438d851405bf47990834dff8704739447c29c6398746aa0e+-- hash: ee075abaa5a355783e9d5654e999ec647b0927daf34932c6a04eea6c66e688f2 name: dependent-literals-version: 0.1.0.0+version: 0.1.1.0 synopsis: Provides library support for pseudo-dependently-typed int literals. description: This is the library counterpart of <https://hackage.haskell.org/package/dependent-literals-plugin dependent-literals-plugin>.@@ -45,4 +45,5 @@ , sint >=0.1 && <0.2 , snumber >=0.1 && <0.2 , tagged >=0.8 && <0.9+ , wrapped >=0.1 && <0.2 default-language: Haskell2010
src/DependentLiterals/Int.hs view
@@ -87,9 +87,10 @@ import Numeric.Natural (Natural) import Unsafe.Coerce (unsafeCoerce) -import Data.Tagged (Tagged(..)) import Data.SInt (SInt(SI#, unSInt)) import Data.SNumber (SafeSNumber, SNumber(N#), sameSNumber, unsafeMkSNumber)+import Data.Tagged (Tagged(..))+import Data.Wrapped (Wrapped(..)) import Kinds.Integer (type (-#), KnownInteger(..), pattern Pos) import Kinds.Num (type (>=), type (<), Cmp, ToInteger) import qualified Kinds.Integer as K (Integer)@@ -299,8 +300,12 @@ Nothing -> CNothing --- | A type with a 'HasIntLiterals' instance that just behaves like 'Num'.+-- | Use @'Wrapped' Num@ directly instead. --+-- The 'HasIntLiterals' instance of @'Wrapped' Num@ results in integral+-- literals and patterns that behave like the stock literals would have,+-- according to the underlying type's 'Num' instance.+-- -- For use with @-XDerivingVia@. This calls through to the 'fromIntegral' of -- the underlying 'Num' instance for the final conversion. If the type in -- question has a 'Num' instance and it's acceptable for literals to overflow@@ -312,15 +317,16 @@ -- -- @ -- newtype MyType = MyType Int--- deriving Num--- deriving HasIntLiterals via StockLit Int+-- deriving (Eq, Num)+-- deriving HasIntLiterals via Wrapped Num MyType -- @ -- -- Note in this case you could just as well say @deriving HasIntLiterals@ to -- get a @GeneralizedNewtypeDeriving@ instance that consumes Int literals and--- coerces them, but if you wrote a custom Num instance, @via FromIntegral _ _@+-- coerces them, but if you wrote a custom Num instance, @via Wrapped Num MyType@ -- will respect it. newtype StockLit a = StockLit a+ deriving HasIntLiterals via Wrapped Num a class NoConstraint (a :: k) instance NoConstraint a@@ -329,14 +335,14 @@ class NoAssertion (a :: Type) (n :: K.Integer) instance NoAssertion a n -instance (Eq a, Num a) => HasIntLiterals (StockLit a) where- type ReprAssertion (StockLit a) = NoAssertion- type LitConstraint (StockLit a) = NoConstraint- type LitAssertion (StockLit a) = NoAssertion+instance (Eq a, Num a) => HasIntLiterals (Wrapped Num a) where+ type ReprAssertion (Wrapped Num a) = NoAssertion+ type LitConstraint (Wrapped Num a) = NoConstraint+ type LitAssertion (Wrapped Num a) = NoAssertion - unsafeFromInteger _ (Tagged n) = StockLit (fromInteger n)+ unsafeFromInteger _ (Tagged n) = Wrapped (fromInteger n) - unsafeMatchInteger _ (Tagged n) (StockLit a) = if fromInteger n == a+ unsafeMatchInteger _ (Tagged n) (Wrapped a) = if fromInteger n == a then CJust else CNothing @@ -374,60 +380,61 @@ deriving via SNumLit (FinLitAssertion n) (Fin n) instance HasIntLiterals (Fin n) -deriving via StockLit Integer instance HasIntLiterals Integer-deriving via StockLit Natural instance HasIntLiterals Natural-deriving via StockLit (Ratio a) instance Integral a => HasIntLiterals (Ratio a)+deriving via Wrapped Num Integer instance HasIntLiterals Integer+deriving via Wrapped Num Natural instance HasIntLiterals Natural+deriving via Wrapped Num (Ratio a)+ instance Integral a => HasIntLiterals (Ratio a) -deriving via StockLit Int instance HasIntLiterals Int-deriving via StockLit Int8 instance HasIntLiterals Int8-deriving via StockLit Int16 instance HasIntLiterals Int16-deriving via StockLit Int32 instance HasIntLiterals Int32-deriving via StockLit Int64 instance HasIntLiterals Int64+deriving via Wrapped Num Int instance HasIntLiterals Int+deriving via Wrapped Num Int8 instance HasIntLiterals Int8+deriving via Wrapped Num Int16 instance HasIntLiterals Int16+deriving via Wrapped Num Int32 instance HasIntLiterals Int32+deriving via Wrapped Num Int64 instance HasIntLiterals Int64 -deriving via StockLit Word instance HasIntLiterals Word-deriving via StockLit Word8 instance HasIntLiterals Word8-deriving via StockLit Word16 instance HasIntLiterals Word16-deriving via StockLit Word32 instance HasIntLiterals Word32-deriving via StockLit Word64 instance HasIntLiterals Word64+deriving via Wrapped Num Word instance HasIntLiterals Word+deriving via Wrapped Num Word8 instance HasIntLiterals Word8+deriving via Wrapped Num Word16 instance HasIntLiterals Word16+deriving via Wrapped Num Word32 instance HasIntLiterals Word32+deriving via Wrapped Num Word64 instance HasIntLiterals Word64 -deriving via StockLit Float instance HasIntLiterals Float-deriving via StockLit Double instance HasIntLiterals Double+deriving via Wrapped Num Float instance HasIntLiterals Float+deriving via Wrapped Num Double instance HasIntLiterals Double -deriving via StockLit (Sum a)+deriving via Wrapped Num (Sum a) instance (Eq a, Num a) => HasIntLiterals (Sum a)-deriving via StockLit (Product a)+deriving via Wrapped Num (Product a) instance (Eq a, Num a) => HasIntLiterals (Product a)-deriving via StockLit (Min a)+deriving via Wrapped Num (Min a) instance (Eq a, Num a) => HasIntLiterals (Min a)-deriving via StockLit (Max a)+deriving via Wrapped Num (Max a) instance (Eq a, Num a) => HasIntLiterals (Max a)-deriving via StockLit (Const a b)+deriving via Wrapped Num (Const a b) instance (Eq a, Num a) => HasIntLiterals (Const a b)-deriving via StockLit (Identity a)+deriving via Wrapped Num (Identity a) instance (Eq a, Num a) => HasIntLiterals (Identity a) -deriving via StockLit CChar instance HasIntLiterals CChar-deriving via StockLit CSChar instance HasIntLiterals CSChar-deriving via StockLit CUChar instance HasIntLiterals CUChar-deriving via StockLit CShort instance HasIntLiterals CShort-deriving via StockLit CUShort instance HasIntLiterals CUShort-deriving via StockLit CInt instance HasIntLiterals CInt-deriving via StockLit CUInt instance HasIntLiterals CUInt-deriving via StockLit CLong instance HasIntLiterals CLong-deriving via StockLit CULong instance HasIntLiterals CULong-deriving via StockLit CPtrdiff instance HasIntLiterals CPtrdiff-deriving via StockLit CSize instance HasIntLiterals CSize-deriving via StockLit CWchar instance HasIntLiterals CWchar-deriving via StockLit CSigAtomic instance HasIntLiterals CSigAtomic-deriving via StockLit CLLong instance HasIntLiterals CLLong-deriving via StockLit CULLong instance HasIntLiterals CULLong-deriving via StockLit CBool instance HasIntLiterals CBool-deriving via StockLit CIntPtr instance HasIntLiterals CIntPtr-deriving via StockLit CUIntPtr instance HasIntLiterals CUIntPtr-deriving via StockLit CIntMax instance HasIntLiterals CIntMax-deriving via StockLit CUIntMax instance HasIntLiterals CUIntMax-deriving via StockLit CClock instance HasIntLiterals CClock-deriving via StockLit CTime instance HasIntLiterals CTime-deriving via StockLit CUSeconds instance HasIntLiterals CUSeconds-deriving via StockLit CSUSeconds instance HasIntLiterals CSUSeconds+deriving via Wrapped Num CChar instance HasIntLiterals CChar+deriving via Wrapped Num CSChar instance HasIntLiterals CSChar+deriving via Wrapped Num CUChar instance HasIntLiterals CUChar+deriving via Wrapped Num CShort instance HasIntLiterals CShort+deriving via Wrapped Num CUShort instance HasIntLiterals CUShort+deriving via Wrapped Num CInt instance HasIntLiterals CInt+deriving via Wrapped Num CUInt instance HasIntLiterals CUInt+deriving via Wrapped Num CLong instance HasIntLiterals CLong+deriving via Wrapped Num CULong instance HasIntLiterals CULong+deriving via Wrapped Num CPtrdiff instance HasIntLiterals CPtrdiff+deriving via Wrapped Num CSize instance HasIntLiterals CSize+deriving via Wrapped Num CWchar instance HasIntLiterals CWchar+deriving via Wrapped Num CSigAtomic instance HasIntLiterals CSigAtomic+deriving via Wrapped Num CLLong instance HasIntLiterals CLLong+deriving via Wrapped Num CULLong instance HasIntLiterals CULLong+deriving via Wrapped Num CBool instance HasIntLiterals CBool+deriving via Wrapped Num CIntPtr instance HasIntLiterals CIntPtr+deriving via Wrapped Num CUIntPtr instance HasIntLiterals CUIntPtr+deriving via Wrapped Num CIntMax instance HasIntLiterals CIntMax+deriving via Wrapped Num CUIntMax instance HasIntLiterals CUIntMax+deriving via Wrapped Num CClock instance HasIntLiterals CClock+deriving via Wrapped Num CTime instance HasIntLiterals CTime+deriving via Wrapped Num CUSeconds instance HasIntLiterals CUSeconds+deriving via Wrapped Num CSUSeconds instance HasIntLiterals CSUSeconds #endif