packages feed

TypeNat 0.4.0.1 → 0.5.0.0

raw patch · 4 files changed

+37/−16 lines, 4 filesdep ~basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base

API changes (from Hackage documentation)

- Data.TypeNat.Fin: FS :: Fin k -> Fin (S k)
- Data.TypeNat.Fin: FZ :: Fin (S n)
- Data.TypeNat.Nat: instance [incoherent] Eq Nat
- Data.TypeNat.Nat: instance [incoherent] IsNat 'Z
- Data.TypeNat.Nat: instance [incoherent] IsNat n => IsNat ('S n)
- Data.TypeNat.Nat: instance [incoherent] LTE n m => LTE n ('S m)
- Data.TypeNat.Nat: instance [incoherent] LTE n n
- Data.TypeNat.Nat: instance [incoherent] Ord Nat
- Data.TypeNat.Vect: VCons :: a -> Vect a n -> Vect a (S n)
- Data.TypeNat.Vect: VNil :: Vect a Z
- Data.TypeNat.Vect: instance Eq t => Eq (Vect t n)
- Data.TypeNat.Vect: instance Show t => Show (Vect t n)
+ Data.TypeNat.Fin: [FS] :: Fin k -> Fin (S k)
+ Data.TypeNat.Fin: [FZ] :: Fin (S n)
+ Data.TypeNat.Fin: safeUpdate :: Fin n -> (a -> a) -> Vect n a -> Vect n a
+ Data.TypeNat.Nat: instance Data.TypeNat.Nat.IsNat 'Data.TypeNat.Nat.Z
+ Data.TypeNat.Nat: instance Data.TypeNat.Nat.IsNat n => Data.TypeNat.Nat.IsNat ('Data.TypeNat.Nat.S n)
+ Data.TypeNat.Nat: instance Data.TypeNat.Nat.LTE n m => Data.TypeNat.Nat.LTE n ('Data.TypeNat.Nat.S m)
+ Data.TypeNat.Nat: instance Data.TypeNat.Nat.LTE n n
+ Data.TypeNat.Nat: instance GHC.Classes.Eq Data.TypeNat.Nat.Nat
+ Data.TypeNat.Nat: instance GHC.Classes.Ord Data.TypeNat.Nat.Nat
+ Data.TypeNat.Vect: [VCons] :: a -> Vect n a -> Vect (S n) a
+ Data.TypeNat.Vect: [VNil] :: Vect Z a
+ Data.TypeNat.Vect: instance Data.Foldable.Foldable (Data.TypeNat.Vect.Vect n)
+ Data.TypeNat.Vect: instance Data.Traversable.Traversable (Data.TypeNat.Vect.Vect n)
+ Data.TypeNat.Vect: instance GHC.Base.Functor (Data.TypeNat.Vect.Vect n)
+ Data.TypeNat.Vect: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.TypeNat.Vect.Vect n a)
+ Data.TypeNat.Vect: instance GHC.Show.Show a => GHC.Show.Show (Data.TypeNat.Vect.Vect n a)
- Data.TypeNat.Fin: safeIndex :: Vect a n -> Fin n -> a
+ Data.TypeNat.Fin: safeIndex :: Fin n -> Vect n a -> a
- Data.TypeNat.Vect: data Vect :: * -> Nat -> *
+ Data.TypeNat.Vect: data Vect :: Nat -> * -> *
- Data.TypeNat.Vect: listToVect :: IsNat n => [a] -> Maybe (Vect a n)
+ Data.TypeNat.Vect: listToVect :: IsNat n => [a] -> Maybe (Vect n a)
- Data.TypeNat.Vect: showVect :: Show a => Vect a l -> String
+ Data.TypeNat.Vect: showVect :: Show a => Vect l a -> String
- Data.TypeNat.Vect: vectMap :: (a -> b) -> Vect a n -> Vect b n
+ Data.TypeNat.Vect: vectMap :: (a -> b) -> Vect n a -> Vect n b
- Data.TypeNat.Vect: vectSnoc :: a -> Vect a n -> Vect a (S n)
+ Data.TypeNat.Vect: vectSnoc :: a -> Vect n a -> Vect (S n) a
- Data.TypeNat.Vect: vectToList :: Vect a n -> [a]
+ Data.TypeNat.Vect: vectToList :: Vect n a -> [a]

Files

Data/TypeNat/Fin.hs view
@@ -18,6 +18,7 @@   , ix10    , safeIndex+  , safeUpdate    , module Data.TypeNat.Nat @@ -43,6 +44,11 @@ ix10 = FS ix9  -- | Safely index a Vect.-safeIndex :: Vect a n -> Fin n -> a-safeIndex (VCons a _) FZ = a-safeIndex (VCons _ v) (FS x) = safeIndex v x+safeIndex :: Fin n -> Vect n a -> a+safeIndex FZ (VCons a _) = a+safeIndex (FS x) (VCons _ v) = safeIndex x v++-- | Safely update a Vect.+safeUpdate :: Fin n -> (a -> a) -> Vect n a -> Vect n a+safeUpdate FZ f (VCons x rest) = VCons (f x) rest+safeUpdate (FS fs) f (VCons x rest) = VCons x (safeUpdate fs f rest)
Data/TypeNat/Nat.hs view
@@ -34,6 +34,7 @@ import Data.Proxy import GHC.Exts (Constraint) +-- | Natural numbers data Nat = Z | S Nat  instance Eq Nat where
Data/TypeNat/Vect.hs view
@@ -20,43 +20,57 @@ import Data.TypeNat.Nat  -- | Nat-indexed list, where the nat determines the length.-data Vect :: * -> Nat -> * where-  VNil :: Vect a Z-  VCons :: a -> Vect a n -> Vect a (S n)+data Vect :: Nat -> * -> * where+  VNil :: Vect Z a+  VCons :: a -> Vect n a -> Vect (S n) a -deriving instance Eq t => Eq (Vect t n)-deriving instance Show t => Show (Vect t n)+deriving instance Eq a => Eq (Vect n a)+deriving instance Show a => Show (Vect n a) +instance Functor (Vect n) where+    fmap = vectMap++instance Foldable (Vect n) where+    foldr f b vect = case vect of+        VNil -> b+        VCons x rest -> f x (foldr f b rest)++instance Traversable (Vect n) where+    traverse f vect = case vect of+        VNil -> pure VNil+        VCons x rest -> VCons <$> f x <*> traverse f rest+ -- | A kind of fmap for Vect.-vectMap :: (a -> b) -> Vect a n -> Vect b n+vectMap :: (a -> b) -> Vect n a -> Vect n b vectMap f vect = case vect of   VNil -> VNil   VCons x v -> VCons (f x) (vectMap f v)  -- | VCons to the end of a Vect.-vectSnoc :: a -> Vect a n -> Vect a (S n)+vectSnoc :: a -> Vect n a -> Vect (S n) a vectSnoc x vect = case vect of   VNil -> VCons x VNil   VCons y v -> VCons y (vectSnoc x v) -showVect :: Show a => Vect a l -> String+-- | Show a Vect.+showVect :: Show a => Vect l a -> String showVect VNil = "VNil" showVect (VCons x xs) = show x ++ " , " ++ showVect xs  -- | Drop the length index from a Vect, giving a typical list.-vectToList :: Vect a n -> [a]+vectToList :: Vect n a -> [a] vectToList v = case v of   VNil -> []   VCons x xs -> x : vectToList xs  -- | Used to implement listToVect through natRecursion. newtype MaybeVect a n = MV {-    unMV :: Maybe (Vect a n)+    unMV :: Maybe (Vect n a)   }  -- | Try to produce a Vect from a list. The nat index must be fixed somehow, --   perhaps with the help of ScopedTypeVariables.-listToVect:: IsNat n => [a] -> Maybe (Vect a n)+listToVect:: IsNat n => [a] -> Maybe (Vect n a) listToVect = unMV . listToVect'    where
TypeNat.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                TypeNat-version:             0.4.0.1+version:             0.5.0.0 synopsis:            Some Nat-indexed types for GHC -- description:          homepage:            https://github.com/avieth/TypeNat@@ -31,6 +31,6 @@                      , TypeFamilies                      , KindSignatures -  build-depends:       base >=4.7 && < 4.9+  build-depends:       base >=4.7 && < 4.11   -- hs-source-dirs:         default-language:    Haskell2010