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

Cybus.FinMat

Description

 
Synopsis

Documentation

data FinMat ns Source #

definition of the indices of a matrix

Instances

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

Defined in Cybus.FinMat

Methods

minBound :: FinMat ns #

maxBound :: FinMat ns #

NSC 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 #

NSC 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 #

NSC 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 #

NSC 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 -> () #

NSC 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 #

NSC 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 #

NSC 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 #

NSC 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.1.0.0-9S4fL0ZOrKq7HREyQ0e5on" '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.1.0.0-9S4fL0ZOrKq7HREyQ0e5on" '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 :: NonEmpty Nat). Int -> NonEmpty Pos -> FinMat ns Source #

readonly pattern synonym for finmatrix

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

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

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. NSC ns => Int -> NonEmpty Pos -> Either String (FinMat ns) Source #

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

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

create a FinMat using a relative type level index

class FinMatC is ns where Source #

convert type level indices into a FinMat

Methods

finMatC :: FinMat ns Source #

Instances

Instances details
(NSC is, NSC ns, FinMatT is ns 1 is ns) => FinMatC (is :: NonEmpty Nat) ns Source # 
Instance details

Defined in Cybus.FinMat

Methods

finMatC :: FinMat ns Source #

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

convert a FinMat into a list of indices

nonEmptyToFinMat :: forall ns. NSC 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. NSC ns => ReadP (FinMat ns) Source #

reader for showFin

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

reader for FinMat

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

more detailed pretty print FinMat

constructors

miscellaneous

class NSC (ns :: NonEmpty Nat) where #

conversion from nonempty list of Nats to Positives

Minimal complete definition

fromNSP, nsLengthP

Instances

Instances details
PosT n => NSC (n :| ('[] :: [Nat])) 
Instance details

Defined in Data.Pos

(PosT n, NSC (n1 :| ns)) => NSC (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 <= Length ns"

Instances

Instances details
(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 :| ('[] :: [Nat])) 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

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

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

finMatFinSet :: forall i n ns. (PosT 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. (PosT 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 PosT n

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

find the relative position in a matrix index

lens into indices of matrix

_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