type-combinators-0.2.0.0: A collection of data types for type-level programming

CopyrightCopyright (C) 2015 Kyle Carter
LicenseBSD3
MaintainerKyle Carter <kylcarte@indiana.edu>
Stabilityexperimental
PortabilityRankNTypes
Safe HaskellNone
LanguageHaskell2010

Data.Type.Vector

Description

V and its combinator analog VT represent lists of known length, characterized by the index (n :: N) in V n a or VT n f a.

The classic example used ad nauseum for type-level programming.

The operations on V and VT correspond to the type level arithmetic operations on the kind N.

Documentation

data VT n f :: k -> * where Source

Constructors

ØV :: VT Z f a 
(:*) :: !(f a) -> !(VT n f a) -> VT (S n) f a infixr 4 

Instances

Witness ØC (Known N Nat n) (VT k n f a) Source 
(Monad f, Known N Nat n) => Monad (VT * n f) Source 
Functor f => Functor (VT * n f) Source 
(Applicative f, Known N Nat n) => Applicative (VT * n f) Source 
Foldable f => Foldable (VT * n f) Source 
Traversable f => Traversable (VT * n f) Source 
Eq (f a) => Eq (VT k n f a) Source 
(Num (f a), Known N Nat n) => Num (VT k n f a) Source 
Ord (f a) => Ord (VT k n f a) Source 
Show (f a) => Show (VT k n f a) Source 
type WitnessC ØC (Known N Nat n) (VT k n f a) = ØC 

elimVT :: p Z -> (forall x. f a -> p x -> p (S x)) -> VT n f a -> p n Source

elimV :: p Z -> (forall x. a -> p x -> p (S x)) -> V n a -> p n Source

type V n = VT n I Source

pattern (:+) :: a -> V n a -> V (S n) a infixr 4 Source

(.++) :: VT x f a -> VT y f a -> VT (x + y) f a infixr 5 Source

vrep :: forall n f a. Known Nat n => f a -> VT n f a Source

head' :: VT (S n) f a -> f a Source

tail' :: VT (S n) f a -> VT n f a Source

onTail :: (VT m f a -> VT n f a) -> VT (S m) f a -> VT (S n) f a Source

vDel :: Fin n -> VT n f a -> VT (Pred n) f a Source

imap :: (Fin n -> f a -> g b) -> VT n f a -> VT n g b Source

ifoldMap :: Monoid m => (Fin n -> f a -> m) -> VT n f a -> m Source

itraverse :: Applicative h => (Fin n -> f a -> h (g b)) -> VT n f a -> h (VT n g b) Source

index :: Fin n -> VT n f a -> f a Source

vmap :: (f a -> g b) -> VT n f a -> VT n g b Source

vap :: (f a -> g b -> h c) -> VT n f a -> VT n g b -> VT n h c Source

vfoldr :: (f a -> b -> b) -> b -> VT n f a -> b Source

vfoldMap' :: (b -> b -> b) -> b -> (f a -> b) -> VT n f a -> b Source

vfoldMap :: Monoid m => (f a -> m) -> VT n f a -> m Source

withVT :: [f a] -> (forall n. VT n f a -> r) -> r Source

withV :: [a] -> (forall n. V n a -> r) -> r Source

findV :: Eq a => a -> V n a -> Maybe (Fin n) Source

findVT :: Eq (f a) => f a -> VT n f a -> Maybe (Fin n) Source

newtype M ns a Source

Constructors

M 

Fields

getMatrix :: Matrix ns a
 

Instances

Eq (Matrix ns a) => Eq (M ns a) Source 
Num (Matrix ns a) => Num (M ns a) Source 
Ord (Matrix ns a) => Ord (M ns a) Source 
Show (Matrix ns a) => Show (M ns a) Source 

type family Matrix ns :: * -> * Source

Equations

Matrix Ø = I 
Matrix (n :< ns) = VT n (Matrix ns) 

vgen_ :: Known Nat n => (Fin n -> f a) -> VT n f a Source

vgen :: Nat n -> (Fin n -> f a) -> VT n f a Source

mgen_ :: Known (Prod Nat) ns => (Prod Fin ns -> a) -> M ns a Source

mgen :: Prod Nat ns -> (Prod Fin ns -> a) -> M ns a Source

onMatrix :: (Matrix ms a -> Matrix ns b) -> M ms a -> M ns b Source

diagonal :: VT n (VT n f) a -> VT n f a Source

vtranspose :: Known Nat n => VT m (VT n f) a -> VT n (VT m f) a Source

transpose :: Known Nat n => M (m :< (n :< ns)) a -> M (n :< (m :< ns)) a Source

m1 :: M `[N2]` Int Source

m2 :: M `[N2, N4]` Int Source

m3 :: M `[N2, N3, N4]` (Int, Int, Int) Source

m4 :: M `[N2, N3, N4, N5]` (Int, Int, Int, Int) Source

ppVec :: (VT n ((->) String) String -> ShowS) -> (f a -> ShowS) -> VT n f a -> ShowS Source

ppMatrix :: forall ns a. (Show a, Known Length ns) => M ns a -> IO () Source

ppMatrix' :: Show a => Length ns -> Matrix ns a -> ShowS Source

mzipWith :: Monoid a => (a -> a -> b) -> [a] -> [a] -> [b] Source

compose :: Foldable f => f (a -> a) -> a -> a Source