cybus-0.3.0.0: multi-dimensional arrays
Copyright(c) Grant Weyburne 2022
LicenseBSD-3
Safe HaskellNone
LanguageHaskell2010

Cybus.FinMat

Description

 
Synopsis

core type

data FinMat ns Source #

definition of the indices of a matrix

Instances

Instances details
NS ns => Bounded (FinMat ns) Source # 
Instance details

Defined in Cybus.FinMat

Methods

minBound :: FinMat ns #

maxBound :: FinMat ns #

NS ns => Enum (FinMat ns) Source # 
Instance details

Defined in Cybus.FinMat

Methods

succ :: FinMat ns -> FinMat ns #

pred :: FinMat ns -> FinMat ns #

toEnum :: Int -> FinMat ns #

fromEnum :: FinMat ns -> Int #

enumFrom :: FinMat ns -> [FinMat ns] #

enumFromThen :: FinMat ns -> FinMat ns -> [FinMat ns] #

enumFromTo :: FinMat ns -> FinMat ns -> [FinMat ns] #

enumFromThenTo :: FinMat ns -> FinMat ns -> FinMat ns -> [FinMat ns] #

Eq (FinMat ns) Source # 
Instance details

Defined in Cybus.FinMat

Methods

(==) :: FinMat ns -> FinMat ns -> Bool #

(/=) :: FinMat ns -> FinMat ns -> Bool #

NS ns => Num (FinMat ns) Source # 
Instance details

Defined in Cybus.FinMat

Methods

(+) :: FinMat ns -> FinMat ns -> FinMat ns #

(-) :: FinMat ns -> FinMat ns -> FinMat ns #

(*) :: FinMat ns -> FinMat ns -> FinMat ns #

negate :: FinMat ns -> FinMat ns #

abs :: FinMat ns -> FinMat ns #

signum :: FinMat ns -> FinMat ns #

fromInteger :: Integer -> FinMat ns #

Ord (FinMat ns) Source # 
Instance details

Defined in Cybus.FinMat

Methods

compare :: FinMat ns -> FinMat ns -> Ordering #

(<) :: FinMat ns -> FinMat ns -> Bool #

(<=) :: FinMat ns -> FinMat ns -> Bool #

(>) :: FinMat ns -> FinMat ns -> Bool #

(>=) :: FinMat ns -> FinMat ns -> Bool #

max :: FinMat ns -> FinMat ns -> FinMat ns #

min :: FinMat ns -> FinMat ns -> FinMat ns #

NS ns => Read (FinMat ns) Source # 
Instance details

Defined in Cybus.FinMat

Show (FinMat ns) Source # 
Instance details

Defined in Cybus.FinMat

Methods

showsPrec :: Int -> FinMat ns -> ShowS #

show :: FinMat ns -> String #

showList :: [FinMat ns] -> ShowS #

Generic (FinMat ns) Source # 
Instance details

Defined in Cybus.FinMat

Associated Types

type Rep (FinMat ns) :: Type -> Type #

Methods

from :: FinMat ns -> Rep (FinMat ns) x #

to :: Rep (FinMat ns) x -> FinMat ns #

Semigroup (FinMat ns) Source # 
Instance details

Defined in Cybus.FinMat

Methods

(<>) :: FinMat ns -> FinMat ns -> FinMat ns #

sconcat :: NonEmpty (FinMat ns) -> FinMat ns #

stimes :: Integral b => b -> FinMat ns -> FinMat ns #

NS ns => Monoid (FinMat ns) Source # 
Instance details

Defined in Cybus.FinMat

Methods

mempty :: FinMat ns #

mappend :: FinMat ns -> FinMat ns -> FinMat ns #

mconcat :: [FinMat ns] -> FinMat ns #

NFData (FinMat ns) Source # 
Instance details

Defined in Cybus.FinMat

Methods

rnf :: FinMat ns -> () #

NS ns => Num1 (FinMat ns) Source # 
Instance details

Defined in Cybus.FinMat

Generic1 FinMat Source # 
Instance details

Defined in Cybus.FinMat

Associated Types

type Rep1 FinMat :: k -> Type #

Methods

from1 :: forall (a :: k). FinMat a -> Rep1 FinMat a #

to1 :: forall (a :: k). Rep1 FinMat a -> FinMat a #

NS ns => FunctorWithIndex (FinMat ns) (Mat ns) Source # 
Instance details

Defined in Cybus.Mat

Methods

imap :: (FinMat ns -> a -> b) -> Mat ns a -> Mat ns b #

NS ns => FoldableWithIndex (FinMat ns) (Mat ns) Source # 
Instance details

Defined in Cybus.Mat

Methods

ifoldMap :: Monoid m => (FinMat ns -> a -> m) -> Mat ns a -> m #

ifoldMap' :: Monoid m => (FinMat ns -> a -> m) -> Mat ns a -> m #

ifoldr :: (FinMat ns -> a -> b -> b) -> b -> Mat ns a -> b #

ifoldl :: (FinMat ns -> b -> a -> b) -> b -> Mat ns a -> b #

ifoldr' :: (FinMat ns -> a -> b -> b) -> b -> Mat ns a -> b #

ifoldl' :: (FinMat ns -> b -> a -> b) -> b -> Mat ns a -> b #

NS ns => TraversableWithIndex (FinMat ns) (Mat ns) Source # 
Instance details

Defined in Cybus.Mat

Methods

itraverse :: Applicative f => (FinMat ns -> a -> f b) -> Mat ns a -> f (Mat ns b) #

type Rep (FinMat ns) Source # 
Instance details

Defined in Cybus.FinMat

type Rep (FinMat ns) = D1 ('MetaData "FinMat" "Cybus.FinMat" "cybus-0.3.0.0-2tgktn1zjvk47vpww9PCqf" 'False) (C1 ('MetaCons "FinMatUnsafe" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (NonEmpty Pos))))
type Rep1 FinMat Source # 
Instance details

Defined in Cybus.FinMat

type Rep1 FinMat = D1 ('MetaData "FinMat" "Cybus.FinMat" "cybus-0.3.0.0-2tgktn1zjvk47vpww9PCqf" 'False) (C1 ('MetaCons "FinMatUnsafe" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (NonEmpty Pos))))

fmPos :: FinMat ns -> Int Source #

accessor for the relative position within a matrix

fmNS :: FinMat ns -> NonEmpty Pos Source #

accessor for the indices of a matrix

pattern FinMat :: forall (ns :: [Nat]). Int -> NonEmpty Pos -> FinMat ns Source #

readonly pattern synonym for finmatrix

pattern FinMatU :: forall (ns :: [Nat]). (HasCallStack, NS ns) => Int -> NonEmpty Pos -> FinMat ns Source #

pattern synonym for validating the finmatrix before construction but uses an extra NS constraint to check "ns"

constructors

class FinMatC is ns where Source #

convert type level indices into a FinMat

Methods

finMatC :: FinMat ns Source #

Instances

Instances details
(TypeError ('Text "FinMatC '[] '[]: empty index 'is' and 'ns'") :: Constraint) => FinMatC ('[] :: [k]) ('[] :: [Nat]) Source # 
Instance details

Defined in Cybus.FinMat

Methods

finMatC :: FinMat '[] Source #

(TypeError ('Text "FinMatC '[] (n ': ns): empty index 'is'") :: Constraint) => FinMatC ('[] :: [k]) (n ': ns) Source # 
Instance details

Defined in Cybus.FinMat

Methods

finMatC :: FinMat (n ': ns) Source #

(TypeError ('Text "FinMatC (i ': is) '[]: empty index 'ns'") :: Constraint) => FinMatC (i ': is :: [a]) ('[] :: [Nat]) Source # 
Instance details

Defined in Cybus.FinMat

Methods

finMatC :: FinMat '[] Source #

(is' ~ (i ': is), ns' ~ (n ': ns), NS is', NS ns', FinMatT is' ns' 1 is' ns') => FinMatC (i ': is :: [Nat]) (n ': ns) Source # 
Instance details

Defined in Cybus.FinMat

Methods

finMatC :: FinMat (n ': ns) Source #

mkFinMat :: Int -> NonEmpty Pos -> Either String (FinMat ns) Source #

create a FinMat value level "i" and "ns" values and validate that "i" is in range

mkFinMatC :: forall ns. NS ns => Int -> NonEmpty Pos -> Either String (FinMat ns) Source #

create a FinMat value level "i" and "ns" values and validate against expected "ns"

finMat :: forall ns. NS ns => Int -> Either String (FinMat ns) Source #

convenience function for conversion from Int to FinMat

toFinMatFromPos :: forall (i :: Nat) ns. (NS ns, i <! ProductT ns) => FinMat ns Source #

create a FinMat using a relative type level index

conversions

finMatToNonEmpty :: forall ns. FinMat ns -> NonEmpty Pos Source #

convert a FinMat into a list of indices

nonEmptyToFinMat :: forall ns. NS ns => NonEmpty Pos -> Either String (FinMat ns) Source #

try to convert a list of indices into a FinMat

nonEmptyToFinMat' :: NonEmpty Pos -> NonEmpty Pos -> Either String (FinMat ns) Source #

try to convert a list of indices into a FinMat

read/show methods

showFinMat :: FinMat ns -> String Source #

pretty print FinMat

readFinMatP :: forall ns. NS ns => ReadP (FinMat ns) Source #

reader for showFin

readFinMat :: NS ns => ReadS (FinMat ns) Source #

reader for FinMat

showFinMat' :: forall ns. FinMat ns -> String Source #

more detailed pretty print FinMat

miscellaneous

class NS (ns :: [Nat]) where #

conversion from list of Nats to Positives

Minimal complete definition

fromNSP, nsLengthP

Instances

Instances details
(TypeError ('Text "NS: empty dimensions are not supported") :: Constraint) => NS ('[] :: [Nat]) 
Instance details

Defined in Data.Pos

PosC n => NS '[n] 
Instance details

Defined in Data.Pos

(PosC n, NS (n1 ': ns)) => NS (n ': (n1 ': ns)) 
Instance details

Defined in Data.Pos

class NSRangeC i ns Source #

constrain i within the size of the indices ie "i >= 1 && i <= LengthT ns"

Instances

Instances details
(TypeError ('Text "NSRangeC '[]: empty indices") :: Constraint) => NSRangeC p ('[] :: [Nat]) Source # 
Instance details

Defined in Cybus.FinMat

(TypeError ('Text "NSRangeC: zero is not a valid index: index must be one or greater") :: Constraint) => NSRangeC 'Z (n ': ns) Source # 
Instance details

Defined in Cybus.FinMat

NSRangeC ('S 'Z) (n ': ns) Source # 
Instance details

Defined in Cybus.FinMat

(TypeError ('Text "NSRangeC: index is larger than the number of matrix indices ns") :: Constraint) => NSRangeC ('S ('S i)) '[n] Source # 
Instance details

Defined in Cybus.FinMat

NSRangeC ('S i) (m ': ns) => NSRangeC ('S ('S i)) (n ': (m ': ns)) Source # 
Instance details

Defined in Cybus.FinMat

relPos :: Foldable1 t => t (Pos, Pos) -> (Pos, Int) Source #

find the relative position in a matrix index

finMatFinSet :: forall i n ns. (PosC i, NSRangeC (NatToPeanoT i) ns) => FinMat ns -> Fin n -> FinMat ns Source #

set the Fin at index "i" for the FinMat

finMatFinGet :: forall i n ns. (PosC i, NSRangeC (NatToPeanoT i) ns) => FinMat ns -> Fin n Source #

get the Fin at index "i" from FinMat must rely on FinMat to get "n at index i "which saves us pulling "n" from the typelevel ie we can omit PosC n

lens into the matrix indices

_finMatCons :: forall n n1 ns. (NS (n1 ': ns), PosC n) => Iso' (FinMat (n ': (n1 ': ns))) (Fin n, FinMat (n1 ': ns)) Source #

iso that conses out the Fin from FinMat

_finMatFin :: forall i n ns. (PosC i, NSRangeC (NatToPeanoT i) ns) => Lens' (FinMat ns) (Fin n) Source #

a lens for accessing the "i" index in a indices of FinMat

_i1 :: Lens' (FinMat (n ': ns)) (Fin n) Source #

lens for index 1

_i2 :: Lens' (FinMat (n1 ': (n ': ns))) (Fin n) Source #

lens for index 2

_i3 :: Lens' (FinMat (n1 ': (n2 ': (n ': ns)))) (Fin n) Source #

lens for index 3

_i4 :: Lens' (FinMat (n1 ': (n2 ': (n3 ': (n ': ns))))) (Fin n) Source #

lens for index 4

_i5 :: Lens' (FinMat (n1 ': (n2 ': (n3 ': (n4 ': (n ': ns)))))) (Fin n) Source #

lens for index 5

_i6 :: Lens' (FinMat (n1 ': (n2 ': (n3 ': (n4 ': (n5 ': (n ': ns))))))) (Fin n) Source #

lens for index 6

_i7 :: Lens' (FinMat (n1 ': (n2 ': (n3 ': (n4 ': (n5 ': (n6 ': (n ': ns)))))))) (Fin n) Source #

lens for index 7

_i8 :: Lens' (FinMat (n1 ': (n2 ': (n3 ': (n4 ': (n5 ': (n6 ': (n7 ': (n ': ns))))))))) (Fin n) Source #

lens for index 8

_i9 :: Lens' (FinMat (n1 ': (n2 ': (n3 ': (n4 ': (n5 ': (n6 ': (n7 ': (n8 ': (n ': ns)))))))))) (Fin n) Source #

lens for index 9

_i10 :: Lens' (FinMat (n1 ': (n2 ': (n3 ': (n4 ': (n5 ': (n6 ': (n7 ': (n8 ': (n9 ': (n ': ns))))))))))) (Fin n) Source #

lens for index 10