harpie 0.1.2.0 → 0.1.3.0
raw patch · 5 files changed
+237/−105 lines, 5 filesdep +harpiedep ~QuickCheckdep ~basedep ~doctest-parallelnew-component:exe:harpie-bug-issue1PVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: harpie
Dependency ranges changed: QuickCheck, base, doctest-parallel
API changes (from Hackage documentation)
- Harpie.Array: unsafeModifyVector :: FromVector u a => FromVector v b => (u -> v) -> Array a -> Array b
+ Harpie.Array: unsafeModifyVector :: (FromVector u a, FromVector v b) => (u -> v) -> Array a -> Array b
- Harpie.Fixed: (!) :: KnownNats s => Array s a -> [Int] -> a
+ Harpie.Fixed: (!) :: forall (s :: [Nat]) a. KnownNats s => Array s a -> [Int] -> a
- Harpie.Fixed: (!?) :: KnownNats s => Array s a -> [Int] -> Maybe a
+ Harpie.Fixed: (!?) :: forall (s :: [Nat]) a. KnownNats s => Array s a -> [Int] -> Maybe a
- Harpie.Fixed: [Array] :: Vector a -> Array s a
+ Harpie.Fixed: [Array] :: forall a (s :: [Nat]). Vector a -> Array s a
- Harpie.Fixed: append :: forall a d s si s'. (KnownNats s, KnownNats si, KnownNats s', s' ~ Eval (IncAt d s), True ~ Eval (InsertOk d s si)) => Dim d -> Array s a -> Array si a -> Array s' a
+ Harpie.Fixed: append :: forall a (d :: Nat) (s :: [Nat]) (si :: [Nat]) (s' :: [Nat]). (KnownNats s, KnownNats si, KnownNats s', s' ~ Eval (IncAt d s), 'True ~ Eval (InsertOk d s si)) => Dim d -> Array s a -> Array si a -> Array s' a
- Harpie.Fixed: array :: forall s a t. (KnownNats s, FromVector t a) => t -> Array s a
+ Harpie.Fixed: array :: forall (s :: [Nat]) a t. (KnownNats s, FromVector t a) => t -> Array s a
- Harpie.Fixed: asScalar :: (KnownNats s, KnownNats s', s' ~ Eval (AsScalar s)) => Array s a -> Array s' a
+ Harpie.Fixed: asScalar :: forall (s :: [Nat]) (s' :: [Nat]) a. (KnownNats s, KnownNats s', s' ~ Eval (AsScalar s)) => Array s a -> Array s' a
- Harpie.Fixed: asSingleton :: (KnownNats s, KnownNats s', s' ~ Eval (AsSingleton s)) => Array s a -> Array s' a
+ Harpie.Fixed: asSingleton :: forall (s :: [Nat]) (s' :: [Nat]) a. (KnownNats s, KnownNats s', s' ~ Eval (AsSingleton s)) => Array s a -> Array s' a
- Harpie.Fixed: backpermute :: forall s' s a. (KnownNats s, KnownNats s') => (Fins s' -> Fins s) -> Array s a -> Array s' a
+ Harpie.Fixed: backpermute :: forall (s' :: [Nat]) (s :: [Nat]) a. (KnownNats s, KnownNats s') => (Fins s' -> Fins s) -> Array s a -> Array s' a
- Harpie.Fixed: chol :: (KnownNat m, Floating a) => Matrix m m a -> Matrix m m a
+ Harpie.Fixed: chol :: forall (m :: Nat) a. (KnownNat m, Floating a, KnownNats '[m, m]) => Matrix m m a -> Matrix m m a
- Harpie.Fixed: coexpand :: forall sc sa sb a b c. (KnownNats sa, KnownNats sb, KnownNats sc, sc ~ Eval ((++) sa sb)) => (a -> b -> c) -> Array sa a -> Array sb b -> Array sc c
+ Harpie.Fixed: coexpand :: forall (sc :: [Nat]) (sa :: [Nat]) (sb :: [Nat]) a b c. (KnownNats sa, KnownNats sb, KnownNats sc, sc ~ Eval (sa ++ sb)) => (a -> b -> c) -> Array sa a -> Array sb b -> Array sc c
- Harpie.Fixed: colWise :: forall a ds s s' xs proxy. (KnownNats s, KnownNats ds, ds ~ Eval (EndDimsOf xs s)) => (Dims ds -> proxy xs -> Array s a -> Array s' a) -> proxy xs -> Array s a -> Array s' a
+ Harpie.Fixed: colWise :: forall a (ds :: [Nat]) (s :: [Nat]) (s' :: [Nat]) (xs :: [Nat]) proxy. (KnownNats s, KnownNats ds, ds ~ Eval (EndDimsOf xs s)) => (Dims ds -> proxy xs -> Array s a -> Array s' a) -> proxy xs -> Array s a -> Array s' a
- Harpie.Fixed: concatenate :: forall a s0 s1 d s. (KnownNats s0, KnownNats s1, KnownNats s, Eval (Concatenate d s0 s1) ~ s) => Dim d -> Array s0 a -> Array s1 a -> Array s a
+ Harpie.Fixed: concatenate :: forall a (s0 :: [Nat]) (s1 :: [Nat]) (d :: Nat) (s :: [Nat]). (KnownNats s0, KnownNats s1, KnownNats s, Eval (Concatenate d s0 s1) ~ s) => Dim d -> Array s0 a -> Array s1 a -> Array s a
- Harpie.Fixed: concats :: forall s s' newd ds a. (KnownNats s, KnownNats s', s' ~ Eval (ConcatDims ds newd s)) => Dims ds -> SNat newd -> Array s a -> Array s' a
+ Harpie.Fixed: concats :: forall (s :: [Nat]) (s' :: [Nat]) (newd :: Nat) (ds :: [Nat]) a. (KnownNats s, KnownNats s', s' ~ Eval (ConcatDims ds newd s)) => Dims ds -> SNat newd -> Array s a -> Array s' a
- Harpie.Fixed: cons :: forall st s sh a. (KnownNats st, KnownNats s, KnownNats sh, True ~ Eval (InsertOk 0 st sh), s ~ Eval (IncAt 0 st), sh ~ Eval (DeleteDim 0 st)) => Array sh a -> Array st a -> Array s a
+ Harpie.Fixed: cons :: forall (st :: [Nat]) (s :: [Nat]) (sh :: [Nat]) a. (KnownNats st, KnownNats s, KnownNats sh, 'True ~ Eval (InsertOk 0 st sh), s ~ Eval (IncAt 0 st), sh ~ Eval (DeleteDim 0 st)) => Array sh a -> Array st a -> Array s a
- Harpie.Fixed: contract :: forall a b s ss se s' ds ds'. (KnownNats se, se ~ Eval (DeleteDims ds' s), KnownNats ds', KnownNats s, KnownNats ss, KnownNats s', s' ~ Eval (GetDims ds' s), ss ~ Eval (MinDim se), ds' ~ Eval (ExceptDims ds s)) => Dims ds -> (Array ss a -> b) -> Array s a -> Array s' b
+ Harpie.Fixed: contract :: forall a b (s :: [Nat]) (ss :: [Nat]) (se :: [Nat]) (s' :: [Nat]) (ds :: [Nat]) (ds' :: [Nat]). (KnownNats se, se ~ Eval (DeleteDims ds' s), KnownNats ds', KnownNats s, KnownNats ss, KnownNats s', s' ~ Eval (GetDims ds' s), ss ~ Eval (MinDim se), ds' ~ Eval (ExceptDims ds s)) => Dims ds -> (Array ss a -> b) -> Array s a -> Array s' b
- Harpie.Fixed: corange :: forall s. KnownNats s => Array s Int
+ Harpie.Fixed: corange :: forall (s :: [Nat]). KnownNats s => Array s Int
- Harpie.Fixed: couple :: forall d a s s' se. (KnownNat d, KnownNats s, KnownNats s', KnownNats se, s' ~ Eval (Concatenate d se se), se ~ Eval (InsertDim d 1 s)) => Dim d -> Array s a -> Array s a -> Array s' a
+ Harpie.Fixed: couple :: forall (d :: Nat) a (s :: [Nat]) (s' :: [Nat]) (se :: [Nat]). (KnownNat d, KnownNats s, KnownNats s', KnownNats se, s' ~ Eval (Concatenate d se se), se ~ Eval (InsertDim d 1 s)) => Dim d -> Array s a -> Array s a -> Array s' a
- Harpie.Fixed: cut :: forall s' s r a. (KnownNats s, KnownNats s', KnownNat r, KnownNats (Eval (Rerank r s)), True ~ Eval (IsSubset s' s), r ~ Eval (Rank s')) => Array s a -> Array s' a
+ Harpie.Fixed: cut :: forall (s' :: [Nat]) (s :: [Nat]) (r :: Nat) a. (KnownNats s, KnownNats s', KnownNat r, KnownNats (Eval (Rerank r s)), 'True ~ Eval (IsSubset s' s), r ~ Eval (Rank s')) => Array s a -> Array s' a
- Harpie.Fixed: cutSuffix :: forall s' s a r. (KnownNats s, KnownNats s', KnownNat r, KnownNats (Eval (Rerank r s)), r ~ Eval (Rank s'), True ~ Eval (IsSubset s' s)) => Array s a -> Array s' a
+ Harpie.Fixed: cutSuffix :: forall (s' :: [Nat]) (s :: [Nat]) a (r :: Nat). (KnownNats s, KnownNats s', KnownNat r, KnownNats (Eval (Rerank r s)), r ~ Eval (Rank s'), 'True ~ Eval (IsSubset s' s)) => Array s a -> Array s' a
- Harpie.Fixed: cycle :: forall s' s a. (KnownNats s, KnownNats s') => Array s a -> Array s' a
+ Harpie.Fixed: cycle :: forall (s' :: [Nat]) (s :: [Nat]) a. (KnownNats s, KnownNats s') => Array s a -> Array s' a
- Harpie.Fixed: delete :: forall d s s' p a. (KnownNats s, KnownNats s', s' ~ Eval (DecAt d s), p ~ (1 + Eval (GetDim d s))) => Dim d -> Fin p -> Array s a -> Array s' a
+ Harpie.Fixed: delete :: forall (d :: Nat) (s :: [Nat]) (s' :: [Nat]) (p :: Natural) a. (KnownNats s, KnownNats s', s' ~ Eval (DecAt d s), p ~ (1 + Eval (GetDim d s))) => Dim d -> Fin p -> Array s a -> Array s' a
- Harpie.Fixed: diag :: forall s' a s. (KnownNats s, KnownNats s', s' ~ Eval (MinDim s)) => Array s a -> Array s' a
+ Harpie.Fixed: diag :: forall (s' :: [Nat]) a (s :: [Nat]). (KnownNats s, KnownNats s', s' ~ Eval (MinDim s)) => Array s a -> Array s' a
- Harpie.Fixed: diffs :: forall a b ds ls si si' st st' so postDrop. (KnownNats ls, KnownNats si, KnownNats si', KnownNats st, KnownNats st', KnownNats so, KnownNats postDrop, si ~ Eval (DeleteDims ds postDrop), so ~ Eval (GetDims ds postDrop), st' ~ Eval (InsertDims ds so si'), postDrop ~ Eval (InsertDims ds so si), postDrop ~ Eval (DropDims ds ls st)) => Dims ds -> SNats ls -> (Array si a -> Array si a -> Array si' b) -> Array st a -> Array st' b
+ Harpie.Fixed: diffs :: forall a b (ds :: [Nat]) (ls :: [Nat]) (si :: [Nat]) (si' :: [Nat]) (st :: [Nat]) (st' :: [Nat]) (so :: [Nat]) (postDrop :: [Nat]). (KnownNats ls, KnownNats si, KnownNats si', KnownNats st, KnownNats st', KnownNats so, KnownNats postDrop, si ~ Eval (DeleteDims ds postDrop), so ~ Eval (GetDims ds postDrop), st' ~ Eval (InsertDims ds so si'), postDrop ~ Eval (InsertDims ds so si), postDrop ~ Eval (DropDims ds ls st)) => Dims ds -> SNats ls -> (Array si a -> Array si a -> Array si' b) -> Array st a -> Array st' b
- Harpie.Fixed: dot :: forall a b c d ds0 ds1 s0 s1 so0 so1 st si. (KnownNats s0, KnownNats s1, KnownNats ds0, KnownNats ds1, KnownNats so0, KnownNats so1, KnownNats st, KnownNats si, so0 ~ Eval (DeleteDims ds0 s0), so1 ~ Eval (DeleteDims ds1 s1), si ~ Eval (GetDims ds0 s0), si ~ Eval (GetDims ds1 s1), st ~ Eval ((++) so0 so1), ds0 ~ '[Eval ((-) (Eval (Rank s0)) 1)], ds1 ~ '[0]) => (Array si c -> d) -> (a -> b -> c) -> Array s0 a -> Array s1 b -> Array st d
+ Harpie.Fixed: dot :: forall a b c d (ds0 :: [Nat]) (ds1 :: [Nat]) (s0 :: [Nat]) (s1 :: [Nat]) (so0 :: [Nat]) (so1 :: [Nat]) (st :: [Nat]) (si :: [Nat]). (KnownNats s0, KnownNats s1, KnownNats ds0, KnownNats ds1, KnownNats so0, KnownNats so1, KnownNats st, KnownNats si, so0 ~ Eval (DeleteDims ds0 s0), so1 ~ Eval (DeleteDims ds1 s1), si ~ Eval (GetDims ds0 s0), si ~ Eval (GetDims ds1 s1), st ~ Eval (so0 ++ so1), ds0 ~ '[Eval (Eval (Rank s0) - 1)], ds1 ~ '[0]) => (Array si c -> d) -> (a -> b -> c) -> Array s0 a -> Array s1 b -> Array st d
- Harpie.Fixed: drop :: forall s s' a d t. (KnownNats s, KnownNats s', Eval (DropDim d t s) ~ s') => Dim d -> SNat t -> Array s a -> Array s' a
+ Harpie.Fixed: drop :: forall (s :: [Nat]) (s' :: [Nat]) a (d :: Nat) (t :: Nat). (KnownNats s, KnownNats s', Eval (DropDim d t s) ~ s') => Dim d -> SNat t -> Array s a -> Array s' a
- Harpie.Fixed: dropB :: forall s s' a d t. (KnownNats s, KnownNats s', Eval (DropDim d t s) ~ s') => Dim d -> SNat t -> Array s a -> Array s' a
+ Harpie.Fixed: dropB :: forall (s :: [Nat]) (s' :: [Nat]) a (d :: Nat) (t :: Nat). (KnownNats s, KnownNats s', Eval (DropDim d t s) ~ s') => Dim d -> SNat t -> Array s a -> Array s' a
- Harpie.Fixed: dropBs :: forall s' s ds xs a. (KnownNats s, KnownNats s', KnownNats ds, KnownNats xs, s' ~ Eval (DropDims ds xs s)) => Dims ds -> SNats xs -> Array s a -> Array s' a
+ Harpie.Fixed: dropBs :: forall (s' :: [Nat]) (s :: [Nat]) (ds :: [Nat]) (xs :: [Nat]) a. (KnownNats s, KnownNats s', KnownNats ds, KnownNats xs, s' ~ Eval (DropDims ds xs s)) => Dims ds -> SNats xs -> Array s a -> Array s' a
- Harpie.Fixed: drops :: forall ds xs s' s a. (KnownNats s, KnownNats s', KnownNats ds, KnownNats xs, s' ~ Eval (DropDims ds xs s)) => Dims ds -> SNats xs -> Array s a -> Array s' a
+ Harpie.Fixed: drops :: forall (ds :: [Nat]) (xs :: [Nat]) (s' :: [Nat]) (s :: [Nat]) a. (KnownNats s, KnownNats s', KnownNats ds, KnownNats xs, s' ~ Eval (DropDims ds xs s)) => Dims ds -> SNats xs -> Array s a -> Array s' a
- Harpie.Fixed: elongate :: (KnownNats s, KnownNats s', s' ~ Eval (InsertDim d 1 s)) => Dim d -> Array s a -> Array s' a
+ Harpie.Fixed: elongate :: forall (s :: [Nat]) (s' :: [Nat]) (d :: Nat) a. (KnownNats s, KnownNats s', s' ~ Eval (InsertDim d 1 s)) => Dim d -> Array s a -> Array s' a
- Harpie.Fixed: expand :: forall sc sa sb a b c. (KnownNats sa, KnownNats sb, KnownNats sc, sc ~ Eval ((++) sa sb)) => (a -> b -> c) -> Array sa a -> Array sb b -> Array sc c
+ Harpie.Fixed: expand :: forall (sc :: [Nat]) (sa :: [Nat]) (sb :: [Nat]) a b c. (KnownNats sa, KnownNats sb, KnownNats sc, sc ~ Eval (sa ++ sb)) => (a -> b -> c) -> Array sa a -> Array sb b -> Array sc c
- Harpie.Fixed: extracts :: forall ds st si so a. (KnownNats st, KnownNats ds, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds st), so ~ Eval (GetDims ds st)) => Dims ds -> Array st a -> Array so (Array si a)
+ Harpie.Fixed: extracts :: forall (ds :: [Nat]) (st :: [Nat]) (si :: [Nat]) (so :: [Nat]) a. (KnownNats st, KnownNats ds, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds st), so ~ Eval (GetDims ds st)) => Dims ds -> Array st a -> Array so (Array si a)
- Harpie.Fixed: fill :: forall s' a s. (KnownNats s, KnownNats s') => a -> Array s a -> Array s' a
+ Harpie.Fixed: fill :: forall (s' :: [Nat]) a (s :: [Nat]). (KnownNats s, KnownNats s') => a -> Array s a -> Array s' a
- Harpie.Fixed: filters :: forall ds si so a. (KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds so), KnownNats (Eval (GetDims ds so))) => Dims ds -> (Array si a -> Bool) -> Array so a -> Array (Array si a)
+ Harpie.Fixed: filters :: forall (ds :: [Nat]) (si :: [Nat]) (so :: [Nat]) a. (KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds so), KnownNats (Eval (GetDims ds so))) => Dims ds -> (Array si a -> Bool) -> Array so a -> Array (Array si a)
- Harpie.Fixed: find :: forall s' si s a r i' re ws. (Eq a, KnownNats si, KnownNats s, KnownNats s', KnownNats re, KnownNats i', KnownNat r, KnownNats ws, ws ~ Eval (ExpandWindows i' s), r ~ Eval (Rank s), i' ~ Eval (Rerank r si), re ~ Eval (DimWindows ws s), i' ~ Eval (DeleteDims re ws), s' ~ Eval (GetDims re ws)) => Array si a -> Array s a -> Array s' Bool
+ Harpie.Fixed: find :: forall (s' :: [Nat]) (si :: [Nat]) (s :: [Nat]) a (r :: Nat) (i' :: [Nat]) (re :: [Nat]) (ws :: [Nat]). (Eq a, KnownNats si, KnownNats s, KnownNats s', KnownNats re, KnownNats i', KnownNat r, KnownNats ws, ws ~ Eval (ExpandWindows i' s), r ~ Eval (Rank s), i' ~ Eval (Rerank r si), re ~ Eval (DimWindows ws s), i' ~ Eval (DeleteDims re ws), s' ~ Eval (GetDims re ws)) => Array si a -> Array s a -> Array s' Bool
- Harpie.Fixed: findNoOverlap :: forall s' si s a r i' re ws. (Eq a, KnownNats si, KnownNats s, KnownNats s', KnownNats re, KnownNats i', KnownNat r, KnownNats ws, ws ~ Eval (ExpandWindows i' s), r ~ Eval (Rank s), i' ~ Eval (Rerank r si), re ~ Eval (DimWindows ws s), i' ~ Eval (DeleteDims re ws), s' ~ Eval (GetDims re ws)) => Array si a -> Array s a -> Array s' Bool
+ Harpie.Fixed: findNoOverlap :: forall (s' :: [Nat]) (si :: [Nat]) (s :: [Nat]) a (r :: Nat) (i' :: [Nat]) (re :: [Nat]) (ws :: [Nat]). (Eq a, KnownNats si, KnownNats s, KnownNats s', KnownNats re, KnownNats i', KnownNat r, KnownNats ws, ws ~ Eval (ExpandWindows i' s), r ~ Eval (Rank s), i' ~ Eval (Rerank r si), re ~ Eval (DimWindows ws s), i' ~ Eval (DeleteDims re ws), s' ~ Eval (GetDims re ws)) => Array si a -> Array s a -> Array s' Bool
- Harpie.Fixed: flat :: forall s' s a. (KnownNats s, KnownNats s', s' ~ '[Eval (Size s)]) => Array s a -> Array s' a
+ Harpie.Fixed: flat :: forall (s' :: [Nat]) (s :: [Nat]) a. (KnownNats s, KnownNats s', s' ~ '[Eval (Size s)]) => Array s a -> Array s' a
- Harpie.Fixed: fromScalar :: Array '[] a -> a
+ Harpie.Fixed: fromScalar :: Array ('[] :: [Nat]) a -> a
- Harpie.Fixed: heads :: forall a ds s s'. (KnownNats s, KnownNats s', KnownNats ds, s' ~ Eval (DeleteDims ds s)) => Dims ds -> Array s a -> Array s' a
+ Harpie.Fixed: heads :: forall a (ds :: [Nat]) (s :: [Nat]) (s' :: [Nat]). (KnownNats s, KnownNats s', KnownNats ds, s' ~ Eval (DeleteDims ds s)) => Dims ds -> Array s a -> Array s' a
- Harpie.Fixed: ident :: (KnownNats s, Num a) => Array s a
+ Harpie.Fixed: ident :: forall (s :: [Nat]) a. (KnownNats s, Num a) => Array s a
- Harpie.Fixed: imap :: KnownNats s => ([Int] -> a -> b) -> Array s a -> Array s b
+ Harpie.Fixed: imap :: forall (s :: [Nat]) a b. KnownNats s => ([Int] -> a -> b) -> Array s a -> Array s b
- Harpie.Fixed: indexes :: forall s' s ds xs a. (KnownNats s, KnownNats s', s' ~ Eval (DeleteDims ds s), xs ~ Eval (GetDims ds s)) => Dims ds -> Fins xs -> Array s a -> Array s' a
+ Harpie.Fixed: indexes :: forall (s' :: [Nat]) (s :: [Nat]) (ds :: [Nat]) (xs :: [Nat]) a. (KnownNats s, KnownNats s', s' ~ Eval (DeleteDims ds s), xs ~ Eval (GetDims ds s)) => Dims ds -> Fins xs -> Array s a -> Array s' a
- Harpie.Fixed: indexesT :: forall ds xs s s' a. (KnownNats s, KnownNats ds, KnownNats xs, KnownNats s', s' ~ Eval (DeleteDims ds s), True ~ Eval (IsFins xs =<< GetDims ds s)) => Dims ds -> SNats xs -> Array s a -> Array s' a
+ Harpie.Fixed: indexesT :: forall (ds :: [Nat]) (xs :: [Nat]) (s :: [Nat]) (s' :: [Nat]) a. (KnownNats s, KnownNats ds, KnownNats xs, KnownNats s', s' ~ Eval (DeleteDims ds s), 'True ~ Eval (IsFins xs =<< GetDims ds s)) => Dims ds -> SNats xs -> Array s a -> Array s' a
- Harpie.Fixed: indices :: KnownNats s => Array s [Int]
+ Harpie.Fixed: indices :: forall (s :: [Nat]). KnownNats s => Array s [Int]
- Harpie.Fixed: inflate :: forall s' s d x a. (KnownNats s, KnownNats s', s' ~ Eval (InsertDim d x s)) => Dim d -> SNat x -> Array s a -> Array s' a
+ Harpie.Fixed: inflate :: forall (s' :: [Nat]) (s :: [Nat]) (d :: Nat) (x :: Nat) a. (KnownNats s, KnownNats s', s' ~ Eval (InsertDim d x s)) => Dim d -> SNat x -> Array s a -> Array s' a
- Harpie.Fixed: inits :: forall ds os s s' a ls. (KnownNats s, KnownNats ds, KnownNats s', KnownNats ls, KnownNats os, Eval (SlicesOk ds os ls s) ~ True, os ~ Eval (Replicate (Eval (Rank ds)) 0), ls ~ Eval (GetLastPositions ds s), s' ~ Eval (SetDims ds ls s)) => Dims ds -> Array s a -> Array s' a
+ Harpie.Fixed: inits :: forall (ds :: [Nat]) (os :: [Nat]) (s :: [Nat]) (s' :: [Nat]) a (ls :: [Nat]). (KnownNats s, KnownNats ds, KnownNats s', KnownNats ls, KnownNats os, Eval (SlicesOk ds os ls s) ~ 'True, os ~ Eval (Replicate (Eval (Rank ds)) 0), ls ~ Eval (GetLastPositions ds s), s' ~ Eval (SetDims ds ls s)) => Dims ds -> Array s a -> Array s' a
- Harpie.Fixed: insert :: forall s' s si d p a. (KnownNats s, KnownNats si, KnownNats s', s' ~ Eval (IncAt d s), p ~ Eval (GetDim d s), True ~ Eval (InsertOk d s si)) => Dim d -> Fin p -> Array s a -> Array si a -> Array s' a
+ Harpie.Fixed: insert :: forall (s' :: [Nat]) (s :: [Nat]) (si :: [Nat]) (d :: Nat) (p :: Nat) a. (KnownNats s, KnownNats si, KnownNats s', s' ~ Eval (IncAt d s), p ~ Eval (GetDim d s), 'True ~ Eval (InsertOk d s si)) => Dim d -> Fin p -> Array s a -> Array si a -> Array s' a
- Harpie.Fixed: intercalate :: forall d ds n n' s si st a. (KnownNats s, KnownNats si, KnownNats st, KnownNats ds, KnownNat n, KnownNat n', ds ~ '[d], si ~ Eval (DeleteDim d s), n ~ Eval (GetDim d s), n' ~ Eval ((-) (Eval ((+) n n)) 1), st ~ Eval (InsertDim d n' si)) => Dim d -> Array si a -> Array s a -> Array st a
+ Harpie.Fixed: intercalate :: forall (d :: Nat) (ds :: [Nat]) (n :: Nat) (n' :: Nat) (s :: [Nat]) (si :: [Nat]) (st :: [Nat]) a. (KnownNats s, KnownNats si, KnownNats st, KnownNats ds, KnownNat n, KnownNat n', ds ~ '[d], si ~ Eval (DeleteDim d s), n ~ Eval (GetDim d s), n' ~ Eval (Eval (n + n) - 1), st ~ Eval (InsertDim d n' si)) => Dim d -> Array si a -> Array s a -> Array st a
- Harpie.Fixed: intersperse :: forall d ds n n' s si st a. (KnownNats s, KnownNats si, KnownNats st, KnownNats ds, KnownNat n, KnownNat n', ds ~ '[d], si ~ Eval (DeleteDim d s), n ~ Eval (GetDim d s), n' ~ ((n + n) - 1), st ~ Eval (InsertDim d n' si)) => Dim d -> a -> Array s a -> Array st a
+ Harpie.Fixed: intersperse :: forall (d :: Nat) (ds :: [Nat]) (n :: Nat) (n' :: Nat) (s :: [Nat]) (si :: [Nat]) (st :: [Nat]) a. (KnownNats s, KnownNats si, KnownNats st, KnownNats ds, KnownNat n, KnownNat n', ds ~ '[d], si ~ Eval (DeleteDim d s), n ~ Eval (GetDim d s), n' ~ ((n + n) - 1), st ~ Eval (InsertDim d n' si)) => Dim d -> a -> Array s a -> Array st a
- Harpie.Fixed: inverse :: (Eq a, Floating a, KnownNat m) => Matrix m m a -> Matrix m m a
+ Harpie.Fixed: inverse :: forall a (m :: Nat). (Eq a, Floating a, KnownNat m) => Matrix m m a -> Matrix m m a
- Harpie.Fixed: invtri :: forall a n. (KnownNat n, Floating a, Eq a) => Matrix n n a -> Matrix n n a
+ Harpie.Fixed: invtri :: forall a (n :: Nat). (KnownNat n, Floating a, Eq a) => Matrix n n a -> Matrix n n a
- Harpie.Fixed: iota :: forall n. KnownNat n => Vector n Int
+ Harpie.Fixed: iota :: forall (n :: Nat). KnownNat n => Vector n Int
- Harpie.Fixed: isInfixOf :: forall s' si s a r i' re ws. (Eq a, KnownNats si, KnownNats s, KnownNats s', KnownNats re, KnownNats i', KnownNat r, KnownNats ws, ws ~ Eval (ExpandWindows i' s), r ~ Eval (Rank s), i' ~ Eval (Rerank r si), re ~ Eval (DimWindows ws s), i' ~ Eval (DeleteDims re ws), s' ~ Eval (GetDims re ws)) => Array si a -> Array s a -> Bool
+ Harpie.Fixed: isInfixOf :: forall (s' :: [Nat]) (si :: [Nat]) (s :: [Nat]) a (r :: Nat) (i' :: [Nat]) (re :: [Nat]) (ws :: [Nat]). (Eq a, KnownNats si, KnownNats s, KnownNats s', KnownNats re, KnownNats i', KnownNat r, KnownNats ws, ws ~ Eval (ExpandWindows i' s), r ~ Eval (Rank s), i' ~ Eval (Rerank r si), re ~ Eval (DimWindows ws s), i' ~ Eval (DeleteDims re ws), s' ~ Eval (GetDims re ws)) => Array si a -> Array s a -> Bool
- Harpie.Fixed: isNull :: KnownNats s => Array s a -> Bool
+ Harpie.Fixed: isNull :: forall (s :: [Nat]) a. KnownNats s => Array s a -> Bool
- Harpie.Fixed: isPrefixOf :: forall s' s r a. (Eq a, KnownNats s, KnownNats s', KnownNat r, KnownNats (Eval (Rerank r s)), True ~ Eval (IsSubset s' s), r ~ Eval (Rank s')) => Array s' a -> Array s a -> Bool
+ Harpie.Fixed: isPrefixOf :: forall (s' :: [Nat]) (s :: [Nat]) (r :: Nat) a. (Eq a, KnownNats s, KnownNats s', KnownNat r, KnownNats (Eval (Rerank r s)), 'True ~ Eval (IsSubset s' s), r ~ Eval (Rank s')) => Array s' a -> Array s a -> Bool
- Harpie.Fixed: isScalar :: KnownNats s => Array s a -> Bool
+ Harpie.Fixed: isScalar :: forall (s :: [Nat]) a. KnownNats s => Array s a -> Bool
- Harpie.Fixed: isSuffixOf :: forall s' s r a. (Eq a, KnownNats s, KnownNats s', KnownNat r, KnownNats (Eval (Rerank r s)), r ~ Eval (Rank s'), True ~ Eval (IsSubset s' s)) => Array s' a -> Array s a -> Bool
+ Harpie.Fixed: isSuffixOf :: forall (s' :: [Nat]) (s :: [Nat]) (r :: Nat) a. (Eq a, KnownNats s, KnownNats s', KnownNat r, KnownNats (Eval (Rerank r s)), r ~ Eval (Rank s'), 'True ~ Eval (IsSubset s' s)) => Array s' a -> Array s a -> Bool
- Harpie.Fixed: join :: forall a si so st ds. (KnownNats st, KnownNats si, KnownNats so, KnownNats ds, ds ~ Eval (DimsOf so), st ~ Eval (InsertDims ds so si)) => Array so (Array si a) -> Array st a
+ Harpie.Fixed: join :: forall a (si :: [Nat]) (so :: [Nat]) (st :: [Nat]) (ds :: [Nat]). (KnownNats st, KnownNats si, KnownNats so, KnownNats ds, ds ~ Eval (DimsOf so), st ~ Eval (InsertDims ds so si)) => Array so (Array si a) -> Array st a
- Harpie.Fixed: joins :: forall a ds si so st. (KnownNats ds, KnownNats st, KnownNats si, KnownNats so, Eval (InsertDims ds so si) ~ st) => Dims ds -> Array so (Array si a) -> Array st a
+ Harpie.Fixed: joins :: forall a (ds :: [Nat]) (si :: [Nat]) (so :: [Nat]) (st :: [Nat]). (KnownNats ds, KnownNats st, KnownNats si, KnownNats so, Eval (InsertDims ds so si) ~ st) => Dims ds -> Array so (Array si a) -> Array st a
- Harpie.Fixed: konst :: KnownNats s => a -> Array s a
+ Harpie.Fixed: konst :: forall (s :: [Nat]) a. KnownNats s => a -> Array s a
- Harpie.Fixed: lasts :: forall ds s s' a. (KnownNats s, KnownNats ds, KnownNats s', s' ~ Eval (DeleteDims ds s)) => Dims ds -> Array s a -> Array s' a
+ Harpie.Fixed: lasts :: forall (ds :: [Nat]) (s :: [Nat]) (s' :: [Nat]) a. (KnownNats s, KnownNats ds, KnownNats s', s' ~ Eval (DeleteDims ds s)) => Dims ds -> Array s a -> Array s' a
- Harpie.Fixed: length :: KnownNats s => Array s a -> Int
+ Harpie.Fixed: length :: forall (s :: [Nat]) a. KnownNats s => Array s a -> Int
- Harpie.Fixed: lpad :: forall s' a s r. (KnownNats s, KnownNats s', KnownNat r, KnownNats (Eval (Rerank r s)), r ~ Eval (Rank s')) => a -> Array s a -> Array s' a
+ Harpie.Fixed: lpad :: forall (s' :: [Nat]) a (s :: [Nat]) (r :: Nat). (KnownNats s, KnownNats s', KnownNat r, KnownNats (Eval (Rerank r s)), r ~ Eval (Rank s')) => a -> Array s a -> Array s' a
- Harpie.Fixed: maps :: forall ds s s' si si' so a b. (KnownNats s, KnownNats s', KnownNats si, KnownNats si', KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s' ~ Eval (InsertDims ds so si'), s ~ Eval (InsertDims ds so si)) => Dims ds -> (Array si a -> Array si' b) -> Array s a -> Array s' b
+ Harpie.Fixed: maps :: forall (ds :: [Nat]) (s :: [Nat]) (s' :: [Nat]) (si :: [Nat]) (si' :: [Nat]) (so :: [Nat]) a b. (KnownNats s, KnownNats s', KnownNats si, KnownNats si', KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s' ~ Eval (InsertDims ds so si'), s ~ Eval (InsertDims ds so si)) => Dims ds -> (Array si a -> Array si' b) -> Array s a -> Array s' b
- Harpie.Fixed: modifies :: forall a si s ds so. (KnownNats s, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s ~ Eval (InsertDims ds so si)) => (Array si a -> Array si a) -> Dims ds -> Fins so -> Array s a -> Array s a
+ Harpie.Fixed: modifies :: forall a (si :: [Nat]) (s :: [Nat]) (ds :: [Nat]) (so :: [Nat]). (KnownNats s, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s ~ Eval (InsertDims ds so si)) => (Array si a -> Array si a) -> Dims ds -> Fins so -> Array s a -> Array s a
- Harpie.Fixed: modify :: KnownNats s => Fins s -> (a -> a) -> Array s a -> Array s a
+ Harpie.Fixed: modify :: forall (s :: [Nat]) a. KnownNats s => Fins s -> (a -> a) -> Array s a -> Array s a
- Harpie.Fixed: mult :: forall a ds0 ds1 s0 s1 so0 so1 st si. (Num a, KnownNats s0, KnownNats s1, KnownNats ds0, KnownNats ds1, KnownNats so0, KnownNats so1, KnownNats st, KnownNats si, so0 ~ Eval (DeleteDims ds0 s0), so1 ~ Eval (DeleteDims ds1 s1), si ~ Eval (GetDims ds0 s0), si ~ Eval (GetDims ds1 s1), st ~ Eval ((++) so0 so1), ds0 ~ '[Eval ((-) (Eval (Rank s0)) 1)], ds1 ~ '[0]) => Array s0 a -> Array s1 a -> Array st a
+ Harpie.Fixed: mult :: forall a (ds0 :: [Nat]) (ds1 :: [Nat]) (s0 :: [Nat]) (s1 :: [Nat]) (so0 :: [Nat]) (so1 :: [Nat]) (st :: [Nat]) (si :: [Nat]). (Num a, KnownNats s0, KnownNats s1, KnownNats ds0, KnownNats ds1, KnownNats so0, KnownNats so1, KnownNats st, KnownNats si, so0 ~ Eval (DeleteDims ds0 s0), so1 ~ Eval (DeleteDims ds1 s1), si ~ Eval (GetDims ds0 s0), si ~ Eval (GetDims ds1 s1), st ~ Eval (so0 ++ so1), ds0 ~ '[Eval (Eval (Rank s0) - 1)], ds1 ~ '[0]) => Array s0 a -> Array s1 a -> Array st a
- Harpie.Fixed: orders :: forall ds s a si so. (Ord a, KnownNats s, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s ~ Eval (InsertDims ds so si)) => Dims ds -> Array s a -> Array so Int
+ Harpie.Fixed: orders :: forall (ds :: [Nat]) (s :: [Nat]) a (si :: [Nat]) (so :: [Nat]). (Ord a, KnownNats s, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s ~ Eval (InsertDims ds so si)) => Dims ds -> Array s a -> Array so Int
- Harpie.Fixed: ordersBy :: forall ds s a b si so. (Ord b, KnownNats s, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s ~ Eval (InsertDims ds so si)) => Dims ds -> (Array si a -> Array si b) -> Array s a -> Array so Int
+ Harpie.Fixed: ordersBy :: forall (ds :: [Nat]) (s :: [Nat]) a b (si :: [Nat]) (so :: [Nat]). (Ord b, KnownNats s, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s ~ Eval (InsertDims ds so si)) => Dims ds -> (Array si a -> Array si b) -> Array s a -> Array so Int
- Harpie.Fixed: pad :: forall s' a s r. (KnownNats s, KnownNats s', KnownNat r, KnownNats (Eval (Rerank r s)), r ~ Eval (Rank s')) => a -> Array s a -> Array s' a
+ Harpie.Fixed: pad :: forall (s' :: [Nat]) a (s :: [Nat]) (r :: Nat). (KnownNats s, KnownNats s', KnownNat r, KnownNats (Eval (Rerank r s)), r ~ Eval (Rank s')) => a -> Array s a -> Array s' a
- Harpie.Fixed: pattern (:>) :: forall si sl s a ds ls os. (KnownNats si, KnownNats sl, KnownNats s, True ~ Eval (InsertOk 0 si sl), s ~ Eval (IncAt 0 si), KnownNats ds, KnownNats ls, KnownNats os, sl ~ Eval (DeleteDim 0 si), ds ~ '[0], Eval (SlicesOk ds os ls s) ~ True, os ~ Eval (Replicate (Eval (Rank ds)) 0), ls ~ Eval (GetLastPositions ds s), si ~ Eval (SetDims ds ls s), sl ~ Eval (DeleteDims ds s)) => Array si a -> Array sl a -> Array s a
+ Harpie.Fixed: pattern (:>) :: forall si sl s a (ds :: [Nat]) (ls :: [Nat]) (os :: [Nat]). (KnownNats si, KnownNats sl, KnownNats s, 'True ~ Eval (InsertOk 0 si sl), s ~ Eval (IncAt 0 si), KnownNats ds, KnownNats ls, KnownNats os, sl ~ Eval (DeleteDim 0 si), ds ~ '[0], Eval (SlicesOk ds os ls s) ~ 'True, os ~ Eval (Replicate (Eval (Rank ds)) 0), ls ~ Eval (GetLastPositions ds s), si ~ Eval (SetDims ds ls s), sl ~ Eval (DeleteDims ds s)) => Array si a -> Array sl a -> Array s a
- Harpie.Fixed: prepend :: forall a d s si s'. (KnownNats s, KnownNats si, KnownNats s', s' ~ Eval (IncAt d s), True ~ Eval (InsertOk d s si)) => Dim d -> Array si a -> Array s a -> Array s' a
+ Harpie.Fixed: prepend :: forall a (d :: Nat) (s :: [Nat]) (si :: [Nat]) (s' :: [Nat]). (KnownNats s, KnownNats si, KnownNats s', s' ~ Eval (IncAt d s), 'True ~ Eval (InsertOk d s si)) => Dim d -> Array si a -> Array s a -> Array s' a
- Harpie.Fixed: prod :: forall a b c d s0 s1 so0 so1 si st ds0 ds1. (KnownNats so0, KnownNats so1, KnownNats si, KnownNats s0, KnownNats s1, KnownNats st, KnownNats ds0, KnownNats ds1, so0 ~ Eval (DeleteDims ds0 s0), so1 ~ Eval (DeleteDims ds1 s1), si ~ Eval (GetDims ds0 s0), si ~ Eval (GetDims ds1 s1), st ~ Eval ((++) so0 so1)) => Dims ds0 -> Dims ds1 -> (Array si c -> d) -> (a -> b -> c) -> Array s0 a -> Array s1 b -> Array st d
+ Harpie.Fixed: prod :: forall a b c d (s0 :: [Nat]) (s1 :: [Nat]) (so0 :: [Nat]) (so1 :: [Nat]) (si :: [Nat]) (st :: [Nat]) (ds0 :: [Nat]) (ds1 :: [Nat]). (KnownNats so0, KnownNats so1, KnownNats si, KnownNats s0, KnownNats s1, KnownNats st, KnownNats ds0, KnownNats ds1, so0 ~ Eval (DeleteDims ds0 s0), so1 ~ Eval (DeleteDims ds1 s1), si ~ Eval (GetDims ds0 s0), si ~ Eval (GetDims ds1 s1), st ~ Eval (so0 ++ so1)) => Dims ds0 -> Dims ds1 -> (Array si c -> d) -> (a -> b -> c) -> Array s0 a -> Array s1 b -> Array st d
- Harpie.Fixed: range :: forall s. KnownNats s => Array s Int
+ Harpie.Fixed: range :: forall (s :: [Nat]). KnownNats s => Array s Int
- Harpie.Fixed: rank :: forall a s. KnownNats s => Array s a -> Int
+ Harpie.Fixed: rank :: forall a (s :: [Nat]). KnownNats s => Array s a -> Int
- Harpie.Fixed: reduces :: forall ds st si so a b. (KnownNats st, KnownNats ds, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds st), so ~ Eval (GetDims ds st)) => Dims ds -> (Array si a -> b) -> Array st a -> Array so b
+ Harpie.Fixed: reduces :: forall (ds :: [Nat]) (st :: [Nat]) (si :: [Nat]) (so :: [Nat]) a b. (KnownNats st, KnownNats ds, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds st), so ~ Eval (GetDims ds st)) => Dims ds -> (Array si a -> b) -> Array st a -> Array so b
- Harpie.Fixed: reorder :: forall ds s s' a. (KnownNats s, KnownNats s', s' ~ Eval (Reorder s ds)) => SNats ds -> Array s a -> Array s' a
+ Harpie.Fixed: reorder :: forall (ds :: [Nat]) (s :: [Nat]) (s' :: [Nat]) a. (KnownNats s, KnownNats s', s' ~ Eval (Reorder s ds)) => SNats ds -> Array s a -> Array s' a
- Harpie.Fixed: repeat :: forall s' s a. (KnownNats s, KnownNats s', Eval (IsPrefixOf s s') ~ True) => Array s a -> Array s' a
+ Harpie.Fixed: repeat :: forall (s' :: [Nat]) (s :: [Nat]) a. (KnownNats s, KnownNats s', Eval (IsPrefixOf s s') ~ 'True) => Array s a -> Array s' a
- Harpie.Fixed: rerank :: forall r s s' a. (KnownNats s, KnownNats s', s' ~ Eval (Rerank r s)) => SNat r -> Array s a -> Array s' a
+ Harpie.Fixed: rerank :: forall (r :: Nat) (s :: [Nat]) (s' :: [Nat]) a. (KnownNats s, KnownNats s', s' ~ Eval (Rerank r s)) => SNat r -> Array s a -> Array s' a
- Harpie.Fixed: reshape :: forall s' s a. (Eval (Size s) ~ Eval (Size s'), KnownNats s, KnownNats s') => Array s a -> Array s' a
+ Harpie.Fixed: reshape :: forall (s' :: [Nat]) (s :: [Nat]) a. (Eval (Size s) ~ Eval (Size s'), KnownNats s, KnownNats s') => Array s a -> Array s' a
- Harpie.Fixed: reverses :: forall ds s a. KnownNats s => Dims ds -> Array s a -> Array s a
+ Harpie.Fixed: reverses :: forall (ds :: [Nat]) (s :: [Nat]) a. KnownNats s => Dims ds -> Array s a -> Array s a
- Harpie.Fixed: rotate :: forall d s a. KnownNats s => Dim d -> Int -> Array s a -> Array s a
+ Harpie.Fixed: rotate :: forall (d :: Nat) (s :: [Nat]) a. KnownNats s => Dim d -> Int -> Array s a -> Array s a
- Harpie.Fixed: rotates :: forall a ds s. (KnownNats s, True ~ Eval (IsDims ds s)) => Dims ds -> [Int] -> Array s a -> Array s a
+ Harpie.Fixed: rotates :: forall a (ds :: [Nat]) (s :: [Nat]). (KnownNats s, 'True ~ Eval (IsDims ds s)) => Dims ds -> [Int] -> Array s a -> Array s a
- Harpie.Fixed: rowWise :: forall a ds s s' xs proxy. (KnownNats s, KnownNats ds, ds ~ Eval (DimsOf xs)) => (Dims ds -> proxy xs -> Array s a -> Array s' a) -> proxy xs -> Array s a -> Array s' a
+ Harpie.Fixed: rowWise :: forall a (ds :: [Nat]) (s :: [Nat]) (s' :: [Nat]) (xs :: [Nat]) proxy. (KnownNats s, KnownNats ds, ds ~ Eval (DimsOf xs)) => (Dims ds -> proxy xs -> Array s a -> Array s' a) -> proxy xs -> Array s a -> Array s' a
- Harpie.Fixed: safeArray :: (KnownNats s, FromVector t a) => t -> Maybe (Array s a)
+ Harpie.Fixed: safeArray :: forall (s :: [Nat]) t a. (KnownNats s, FromVector t a) => t -> Maybe (Array s a)
- Harpie.Fixed: select :: forall d a p s s'. (KnownNats s, KnownNats s', s' ~ Eval (DeleteDim d s), p ~ Eval (GetDim d s)) => Dim d -> Fin p -> Array s a -> Array s' a
+ Harpie.Fixed: select :: forall (d :: Nat) a (p :: Nat) (s :: [Nat]) (s' :: [Nat]). (KnownNats s, KnownNats s', s' ~ Eval (DeleteDim d s), p ~ Eval (GetDim d s)) => Dim d -> Fin p -> Array s a -> Array s' a
- Harpie.Fixed: shape :: forall a s. KnownNats s => Array s a -> [Int]
+ Harpie.Fixed: shape :: forall a (s :: [Nat]). KnownNats s => Array s a -> [Int]
- Harpie.Fixed: size :: forall a s. KnownNats s => Array s a -> Int
+ Harpie.Fixed: size :: forall a (s :: [Nat]). KnownNats s => Array s a -> Int
- Harpie.Fixed: slice :: forall a d off l s s'. (KnownNats s, KnownNats s', s' ~ Eval (SetDim d l s), Eval (SliceOk d off l s) ~ True) => Dim d -> SNat off -> SNat l -> Array s a -> Array s' a
+ Harpie.Fixed: slice :: forall a (d :: Nat) (off :: Nat) (l :: Nat) (s :: [Nat]) (s' :: [Nat]). (KnownNats s, KnownNats s', s' ~ Eval (SetDim d l s), Eval (SliceOk d off l s) ~ 'True) => Dim d -> SNat off -> SNat l -> Array s a -> Array s' a
- Harpie.Fixed: slices :: forall a ds ls offs s s'. (KnownNats s, KnownNats s', KnownNats ds, KnownNats ls, KnownNats offs, Eval (SlicesOk ds offs ls s) ~ True, Eval (SetDims ds ls s) ~ s') => Dims ds -> SNats offs -> SNats ls -> Array s a -> Array s' a
+ Harpie.Fixed: slices :: forall a (ds :: [Nat]) (ls :: [Nat]) (offs :: [Nat]) (s :: [Nat]) (s' :: [Nat]). (KnownNats s, KnownNats s', KnownNats ds, KnownNats ls, KnownNats offs, Eval (SlicesOk ds offs ls s) ~ 'True, Eval (SetDims ds ls s) ~ s') => Dims ds -> SNats offs -> SNats ls -> Array s a -> Array s' a
- Harpie.Fixed: snoc :: forall si s sl a. (KnownNats si, KnownNats s, KnownNats sl, True ~ Eval (InsertOk 0 si sl), s ~ Eval (IncAt 0 si), sl ~ Eval (DeleteDim 0 si)) => Array si a -> Array sl a -> Array s a
+ Harpie.Fixed: snoc :: forall (si :: [Nat]) (s :: [Nat]) (sl :: [Nat]) a. (KnownNats si, KnownNats s, KnownNats sl, 'True ~ Eval (InsertOk 0 si sl), s ~ Eval (IncAt 0 si), sl ~ Eval (DeleteDim 0 si)) => Array si a -> Array sl a -> Array s a
- Harpie.Fixed: someArray :: forall s t a. FromVector t a => SNats s -> t -> SomeArray a
+ Harpie.Fixed: someArray :: forall (s :: [Nat]) t a. FromVector t a => SNats s -> t -> SomeArray a
- Harpie.Fixed: sorts :: forall ds s a si so. (Ord a, KnownNats s, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s ~ Eval (InsertDims ds so si)) => Dims ds -> Array s a -> Array s a
+ Harpie.Fixed: sorts :: forall (ds :: [Nat]) (s :: [Nat]) a (si :: [Nat]) (so :: [Nat]). (Ord a, KnownNats s, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s ~ Eval (InsertDims ds so si)) => Dims ds -> Array s a -> Array s a
- Harpie.Fixed: sortsBy :: forall ds s a b si so. (Ord b, KnownNats s, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s ~ Eval (InsertDims ds so si)) => Dims ds -> (Array si a -> Array si b) -> Array s a -> Array s a
+ Harpie.Fixed: sortsBy :: forall (ds :: [Nat]) (s :: [Nat]) a b (si :: [Nat]) (so :: [Nat]). (Ord b, KnownNats s, KnownNats si, KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s ~ Eval (InsertDims ds so si)) => Dims ds -> (Array si a -> Array si b) -> Array s a -> Array s a
- Harpie.Fixed: squeeze :: forall s t a. (KnownNats s, KnownNats t, t ~ Eval (Squeeze s)) => Array s a -> Array t a
+ Harpie.Fixed: squeeze :: forall (s :: [Nat]) (t :: [Nat]) a. (KnownNats s, KnownNats t, t ~ Eval (Squeeze s)) => Array s a -> Array t a
- Harpie.Fixed: tails :: forall ds os s s' a ls. (KnownNats s, KnownNats ds, KnownNats s', KnownNats ls, KnownNats os, Eval (SlicesOk ds os ls s) ~ True, os ~ Eval (Replicate (Eval (Rank ds)) 1), ls ~ Eval (GetLastPositions ds s), s' ~ Eval (SetDims ds ls s)) => Dims ds -> Array s a -> Array s' a
+ Harpie.Fixed: tails :: forall (ds :: [Nat]) (os :: [Nat]) (s :: [Nat]) (s' :: [Nat]) a (ls :: [Nat]). (KnownNats s, KnownNats ds, KnownNats s', KnownNats ls, KnownNats os, Eval (SlicesOk ds os ls s) ~ 'True, os ~ Eval (Replicate (Eval (Rank ds)) 1), ls ~ Eval (GetLastPositions ds s), s' ~ Eval (SetDims ds ls s)) => Dims ds -> Array s a -> Array s' a
- Harpie.Fixed: take :: forall d t s s' a. (KnownNats s, KnownNats s', s' ~ Eval (TakeDim d t s)) => Dim d -> SNat t -> Array s a -> Array s' a
+ Harpie.Fixed: take :: forall (d :: Nat) (t :: Nat) (s :: [Nat]) (s' :: [Nat]) a. (KnownNats s, KnownNats s', s' ~ Eval (TakeDim d t s)) => Dim d -> SNat t -> Array s a -> Array s' a
- Harpie.Fixed: takeB :: forall s s' a d t. (KnownNats s, KnownNats s', s' ~ Eval (TakeDim d t s)) => Dim d -> SNat t -> Array s a -> Array s' a
+ Harpie.Fixed: takeB :: forall (s :: [Nat]) (s' :: [Nat]) a (d :: Nat) (t :: Nat). (KnownNats s, KnownNats s', s' ~ Eval (TakeDim d t s)) => Dim d -> SNat t -> Array s a -> Array s' a
- Harpie.Fixed: takeBs :: forall s' s a ds xs. (KnownNats s, KnownNats s', KnownNats ds, KnownNats xs, s' ~ Eval (SetDims ds xs s)) => Dims ds -> SNats xs -> Array s a -> Array s' a
+ Harpie.Fixed: takeBs :: forall (s' :: [Nat]) (s :: [Nat]) a (ds :: [Nat]) (xs :: [Nat]). (KnownNats s, KnownNats s', KnownNats ds, KnownNats xs, s' ~ Eval (SetDims ds xs s)) => Dims ds -> SNats xs -> Array s a -> Array s' a
- Harpie.Fixed: takes :: forall ds xs s' s a. (KnownNats s, KnownNats s', s' ~ Eval (SetDims ds xs s)) => Dims ds -> SNats xs -> Array s a -> Array s' a
+ Harpie.Fixed: takes :: forall (ds :: [Nat]) (xs :: [Nat]) (s' :: [Nat]) (s :: [Nat]) a. (KnownNats s, KnownNats s', s' ~ Eval (SetDims ds xs s)) => Dims ds -> SNats xs -> Array s a -> Array s' a
- Harpie.Fixed: telecasts :: forall sa sb sc sia sib sic ma mb a b c soa sob ds. (KnownNats sa, KnownNats sb, KnownNats sc, KnownNats sia, KnownNats sib, KnownNats sic, KnownNats soa, KnownNats sob, KnownNats ds, ds ~ Eval (DimsOf soa), sia ~ Eval (DeleteDims ma sa), sib ~ Eval (DeleteDims mb sb), soa ~ Eval (GetDims ma sa), sob ~ Eval (GetDims mb sb), soa ~ sob, sc ~ Eval (InsertDims ds soa sic)) => SNats ma -> SNats mb -> (Array sia a -> Array sib b -> Array sic c) -> Array sa a -> Array sb b -> Array sc c
+ Harpie.Fixed: telecasts :: forall (sa :: [Nat]) (sb :: [Nat]) (sc :: [Nat]) (sia :: [Nat]) (sib :: [Nat]) (sic :: [Nat]) (ma :: [Nat]) (mb :: [Nat]) a b c (soa :: [Nat]) (sob :: [Nat]) (ds :: [Nat]). (KnownNats sa, KnownNats sb, KnownNats sc, KnownNats sia, KnownNats sib, KnownNats sic, KnownNats soa, KnownNats sob, KnownNats ds, ds ~ Eval (DimsOf soa), sia ~ Eval (DeleteDims ma sa), sib ~ Eval (DeleteDims mb sb), soa ~ Eval (GetDims ma sa), sob ~ Eval (GetDims mb sb), soa ~ sob, sc ~ Eval (InsertDims ds soa sic)) => SNats ma -> SNats mb -> (Array sia a -> Array sib b -> Array sic c) -> Array sa a -> Array sb b -> Array sc c
- Harpie.Fixed: toDynamic :: KnownNats s => Array s a -> Array a
+ Harpie.Fixed: toDynamic :: forall (s :: [Nat]) a. KnownNats s => Array s a -> Array a
- Harpie.Fixed: toScalar :: a -> Array '[] a
+ Harpie.Fixed: toScalar :: a -> Array ('[] :: [Nat]) a
- Harpie.Fixed: transmit :: forall sa sb sc a b c ds sib sic sob. (KnownNats sa, KnownNats sb, KnownNats sc, KnownNats ds, KnownNats sib, KnownNats sic, KnownNats sob, ds ~ Eval (EnumFromTo (Eval (Rank sa)) (Eval (Rank sb) - 1)), sib ~ Eval (DeleteDims ds sb), sob ~ Eval (GetDims ds sb), sb ~ Eval (InsertDims ds sob sib), sc ~ Eval (InsertDims ds sob sic), True ~ Eval (IsPrefixOf sa sb)) => (Array sa a -> Array sib b -> Array sic c) -> Array sa a -> Array sb b -> Array sc c
+ Harpie.Fixed: transmit :: forall (sa :: [Nat]) (sb :: [Nat]) (sc :: [Nat]) a b c (ds :: [Nat]) (sib :: [Nat]) (sic :: [Nat]) (sob :: [Nat]). (KnownNats sa, KnownNats sb, KnownNats sc, KnownNats ds, KnownNats sib, KnownNats sic, KnownNats sob, ds ~ Eval (EnumFromTo (Eval (Rank sa)) (Eval (Rank sb) - 1)), sib ~ Eval (DeleteDims ds sb), sob ~ Eval (GetDims ds sb), sb ~ Eval (InsertDims ds sob sib), sc ~ Eval (InsertDims ds sob sic), 'True ~ Eval (IsPrefixOf sa sb)) => (Array sa a -> Array sib b -> Array sic c) -> Array sa a -> Array sb b -> Array sc c
- Harpie.Fixed: transpose :: forall a s s'. (KnownNats s, KnownNats s', s' ~ Eval (Reverse s)) => Array s a -> Array s' a
+ Harpie.Fixed: transpose :: forall a (s :: [Nat]) (s' :: [Nat]). (KnownNats s, KnownNats s', s' ~ Eval (Reverse s)) => Array s a -> Array s' a
- Harpie.Fixed: traverses :: (Applicative f, KnownNats s, KnownNats si, KnownNats so, si ~ Eval (GetDims ds s), so ~ Eval (DeleteDims ds s), s ~ Eval (InsertDims ds si so)) => Dims ds -> (a -> f b) -> Array s a -> f (Array s b)
+ Harpie.Fixed: traverses :: forall f (s :: [Nat]) (si :: [Nat]) (so :: [Nat]) (ds :: [Nat]) a b. (Applicative f, KnownNats s, KnownNats si, KnownNats so, si ~ Eval (GetDims ds s), so ~ Eval (DeleteDims ds s), s ~ Eval (InsertDims ds si so)) => Dims ds -> (a -> f b) -> Array s a -> f (Array s b)
- Harpie.Fixed: type Matrix m n a = Array '[m, n] a
+ Harpie.Fixed: type Matrix (m :: Nat) (n :: Nat) a = Array '[m, n] a
- Harpie.Fixed: type Vector s a = Array '[s] a
+ Harpie.Fixed: type Vector (s :: Nat) a = Array '[s] a
- Harpie.Fixed: uncons :: forall a s sh st ls os ds. (KnownNats s, KnownNats sh, KnownNats st, ds ~ '[0], sh ~ Eval (DeleteDims ds s), KnownNats ls, KnownNats os, os ~ Eval (Replicate (Eval (Rank ds)) 1), ls ~ Eval (GetLastPositions ds s), Eval (SlicesOk ds os ls s) ~ True, st ~ Eval (SetDims ds ls s)) => Array s a -> (Array sh a, Array st a)
+ Harpie.Fixed: uncons :: forall a (s :: [Nat]) (sh :: [Nat]) (st :: [Nat]) (ls :: [Nat]) (os :: [Nat]) (ds :: [Natural]). (KnownNats s, KnownNats sh, KnownNats st, ds ~ '[0], sh ~ Eval (DeleteDims ds s), KnownNats ls, KnownNats os, os ~ Eval (Replicate (Eval (Rank ds)) 1), ls ~ Eval (GetLastPositions ds s), Eval (SlicesOk ds os ls s) ~ 'True, st ~ Eval (SetDims ds ls s)) => Array s a -> (Array sh a, Array st a)
- Harpie.Fixed: undiag :: forall s' a s. (KnownNats s, KnownNats s', s' ~ Eval ((++) s s), Num a) => Array s a -> Array s' a
+ Harpie.Fixed: undiag :: forall (s' :: [Nat]) a (s :: [Nat]). (KnownNats s, KnownNats s', s' ~ Eval (s ++ s), Num a) => Array s a -> Array s' a
- Harpie.Fixed: uniform :: forall s a g m. (StatefulGen g m, UniformRange a, KnownNats s) => g -> (a, a) -> m (Array s a)
+ Harpie.Fixed: uniform :: forall (s :: [Nat]) a g m. (StatefulGen g m, UniformRange a, KnownNats s) => g -> (a, a) -> m (Array s a)
- Harpie.Fixed: unsafeArray :: (KnownNats s, FromVector t a) => t -> Array s a
+ Harpie.Fixed: unsafeArray :: forall (s :: [Nat]) t a. (KnownNats s, FromVector t a) => t -> Array s a
- Harpie.Fixed: unsafeBackpermute :: forall s' s a. (KnownNats s, KnownNats s') => ([Int] -> [Int]) -> Array s a -> Array s' a
+ Harpie.Fixed: unsafeBackpermute :: forall (s' :: [Nat]) (s :: [Nat]) a. (KnownNats s, KnownNats s') => ([Int] -> [Int]) -> Array s a -> Array s' a
- Harpie.Fixed: unsafeIndex :: KnownNats s => Array s a -> [Int] -> a
+ Harpie.Fixed: unsafeIndex :: forall (s :: [Nat]) a. KnownNats s => Array s a -> [Int] -> a
- Harpie.Fixed: unsafeModifyShape :: forall s' s a. (KnownNats s, KnownNats s') => Array s a -> Array s' a
+ Harpie.Fixed: unsafeModifyShape :: forall (s' :: [Nat]) (s :: [Nat]) a. (KnownNats s, KnownNats s') => Array s a -> Array s' a
- Harpie.Fixed: unsafeModifyVector :: KnownNats s => FromVector u a => FromVector v b => (u -> v) -> Array s a -> Array s b
+ Harpie.Fixed: unsafeModifyVector :: forall (s :: [Nat]) u a v b. (KnownNats s, FromVector u a, FromVector v b) => (u -> v) -> Array s a -> Array s b
- Harpie.Fixed: unsafeTabulate :: KnownNats s => ([Int] -> a) -> Array s a
+ Harpie.Fixed: unsafeTabulate :: forall (s :: [Nat]) a. KnownNats s => ([Int] -> a) -> Array s a
- Harpie.Fixed: unsnoc :: forall ds os s a ls si sl. (KnownNats s, KnownNats ds, KnownNats si, KnownNats ls, KnownNats os, KnownNats sl, ds ~ '[0], Eval (SlicesOk ds os ls s) ~ True, os ~ Eval (Replicate (Eval (Rank ds)) 0), ls ~ Eval (GetLastPositions ds s), si ~ Eval (SetDims ds ls s), sl ~ Eval (DeleteDims ds s)) => Array s a -> (Array si a, Array sl a)
+ Harpie.Fixed: unsnoc :: forall (ds :: [Nat]) (os :: [Nat]) (s :: [Nat]) a (ls :: [Nat]) (si :: [Nat]) (sl :: [Nat]). (KnownNats s, KnownNats ds, KnownNats si, KnownNats ls, KnownNats os, KnownNats sl, ds ~ '[0], Eval (SlicesOk ds os ls s) ~ 'True, os ~ Eval (Replicate (Eval (Rank ds)) 0), ls ~ Eval (GetLastPositions ds s), si ~ Eval (SetDims ds ls s), sl ~ Eval (DeleteDims ds s)) => Array s a -> (Array si a, Array sl a)
- Harpie.Fixed: validate :: KnownNats s => Array s a -> Bool
+ Harpie.Fixed: validate :: forall (s :: [Nat]) a. KnownNats s => Array s a -> Bool
- Harpie.Fixed: vector :: forall n a t. (FromVector t a, KnownNat n) => t -> Array '[n] a
+ Harpie.Fixed: vector :: forall (n :: Nat) a t. (FromVector t a, KnownNat n) => t -> Array '[n] a
- Harpie.Fixed: vector' :: forall a n t. FromVector t a => SNat n -> t -> Array '[n] a
+ Harpie.Fixed: vector' :: forall a (n :: Nat) t. FromVector t a => SNat n -> t -> Array '[n] a
- Harpie.Fixed: windows :: forall w s ws a. (KnownNats s, KnownNats ws, ws ~ Eval (ExpandWindows w s)) => SNats w -> Array s a -> Array ws a
+ Harpie.Fixed: windows :: forall (w :: [Nat]) (s :: [Nat]) (ws :: [Nat]) a. (KnownNats s, KnownNats ws, ws ~ Eval (ExpandWindows w s)) => SNats w -> Array s a -> Array ws a
- Harpie.Fixed: with :: forall a r. Array a -> (forall s. KnownNats s => Array s a -> r) -> r
+ Harpie.Fixed: with :: Array a -> (forall (s :: [Nat]). KnownNats s => Array s a -> r) -> r
- Harpie.Fixed: zipWith :: KnownNats s => (a -> b -> c) -> Array s a -> Array s b -> Array s c
+ Harpie.Fixed: zipWith :: forall (s :: [Nat]) a b c. KnownNats s => (a -> b -> c) -> Array s a -> Array s b -> Array s c
- Harpie.Fixed: zips :: forall ds s s' si si' so a b c. (KnownNats s, KnownNats s', KnownNats si, KnownNats si', KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s' ~ Eval (InsertDims ds so si'), s ~ Eval (InsertDims ds so si)) => Dims ds -> (Array si a -> Array si b -> Array si' c) -> Array s a -> Array s b -> Array s' c
+ Harpie.Fixed: zips :: forall (ds :: [Nat]) (s :: [Nat]) (s' :: [Nat]) (si :: [Nat]) (si' :: [Nat]) (so :: [Nat]) a b c. (KnownNats s, KnownNats s', KnownNats si, KnownNats si', KnownNats so, si ~ Eval (DeleteDims ds s), so ~ Eval (GetDims ds s), s' ~ Eval (InsertDims ds so si'), s ~ Eval (InsertDims ds so si)) => Dims ds -> (Array si a -> Array si b -> Array si' c) -> Array s a -> Array s b -> Array s' c
- Harpie.Shape: UnsafeFin :: Int -> Fin s
+ Harpie.Shape: UnsafeFin :: Int -> Fin (s :: k)
- Harpie.Shape: UnsafeFins :: [Int] -> Fins s
+ Harpie.Shape: UnsafeFins :: [Int] -> Fins (s :: k)
- Harpie.Shape: [fromFin] :: Fin s -> Int
+ Harpie.Shape: [fromFin] :: Fin (s :: k) -> Int
- Harpie.Shape: [fromFins] :: Fins s -> [Int]
+ Harpie.Shape: [fromFins] :: Fins (s :: k) -> [Int]
- Harpie.Shape: data () => ( (b :: [a]) ++ (c :: [a]) ) (d :: [a])
+ Harpie.Shape: data ( (b :: [a]) ++ (c :: [a]) ) (d :: [a])
- Harpie.Shape: data AsScalar :: [Nat] -> Exp [Nat]
+ Harpie.Shape: data AsScalar (a :: [Nat]) (b :: [Nat])
- Harpie.Shape: data AsSingleton :: [Nat] -> Exp [Nat]
+ Harpie.Shape: data AsSingleton (a :: [Nat]) (b :: [Nat])
- Harpie.Shape: data ConcatDims :: [Nat] -> Nat -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data ConcatDims (a :: [Nat]) (b :: Nat) (c :: [Nat]) (d :: [Nat])
- Harpie.Shape: data Concatenate :: Nat -> [Nat] -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data Concatenate (a :: Nat) (b :: [Nat]) (c :: [Nat]) (d :: [Nat])
- Harpie.Shape: data ConcatenateOk :: Nat -> [Nat] -> [Nat] -> Exp Bool
+ Harpie.Shape: data ConcatenateOk (a :: Nat) (b :: [Nat]) (c :: [Nat]) (d :: Bool)
- Harpie.Shape: data DecAt :: Nat -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data DecAt (a :: Nat) (b :: [Nat]) (c :: [Nat])
- Harpie.Shape: data DeleteDim :: Nat -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data DeleteDim (a :: Nat) (b :: [Nat]) (c :: [Nat])
- Harpie.Shape: data DeleteDims :: [Nat] -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data DeleteDims (a :: [Nat]) (b :: [Nat]) (c :: [Nat])
- Harpie.Shape: data DimWindows :: [Nat] -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data DimWindows (a :: [Nat]) (b :: [Nat]) (c :: [Nat])
- Harpie.Shape: data DimsOf :: [Nat] -> Exp [Nat]
+ Harpie.Shape: data DimsOf (a :: [Nat]) (b :: [Nat])
- Harpie.Shape: data DropDim :: Nat -> Nat -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data DropDim (a :: Nat) (b :: Nat) (c :: [Nat]) (d :: [Nat])
- Harpie.Shape: data DropDims :: [Nat] -> [Nat] -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data DropDims (a :: [Nat]) (b :: [Nat]) (c :: [Nat]) (d :: [Nat])
- Harpie.Shape: data EndDimsOf :: [Nat] -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data EndDimsOf (a :: [Nat]) (b :: [Nat]) (c :: [Nat])
- Harpie.Shape: data EnumFromTo :: Nat -> Nat -> Exp [Nat]
+ Harpie.Shape: data EnumFromTo (a :: Nat) (b :: Nat) (c :: [Nat])
- Harpie.Shape: data ExceptDims :: [Nat] -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data ExceptDims (a :: [Nat]) (b :: [Nat]) (c :: [Nat])
- Harpie.Shape: data ExpandWindows :: [Nat] -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data ExpandWindows (a :: [Nat]) (b :: [Nat]) (c :: [Nat])
- Harpie.Shape: data Foldl' :: (b -> a -> Exp b) -> b -> t a -> Exp b
+ Harpie.Shape: data Foldl' (c :: b -> a -> Exp b) (d :: b) (e :: t a) (f :: b)
- Harpie.Shape: data GetDim :: Nat -> [Nat] -> Exp Nat
+ Harpie.Shape: data GetDim (a :: Nat) (b :: [Nat]) (c :: Nat)
- Harpie.Shape: data GetDims :: [Nat] -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data GetDims (a :: [Nat]) (b :: [Nat]) (c :: [Nat])
- Harpie.Shape: data GetIndex :: Nat -> [a] -> Exp (Maybe a)
+ Harpie.Shape: data GetIndex (b :: Nat) (c :: [a]) (d :: Maybe a)
- Harpie.Shape: data GetLastPositions :: [Nat] -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data GetLastPositions (a :: [Nat]) (b :: [Nat]) (c :: [Nat])
- Harpie.Shape: data IncAt :: Nat -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data IncAt (a :: Nat) (b :: [Nat]) (c :: [Nat])
- Harpie.Shape: data InsertDim :: Nat -> Nat -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data InsertDim (a :: Nat) (b :: Nat) (c :: [Nat]) (d :: [Nat])
- Harpie.Shape: data InsertDims :: [Nat] -> [Nat] -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data InsertDims (a :: [Nat]) (b :: [Nat]) (c :: [Nat]) (d :: [Nat])
- Harpie.Shape: data InsertOk :: Nat -> [Nat] -> [Nat] -> Exp Bool
+ Harpie.Shape: data InsertOk (a :: Nat) (b :: [Nat]) (c :: [Nat]) (d :: Bool)
- Harpie.Shape: data IsDim :: Nat -> [Nat] -> Exp Bool
+ Harpie.Shape: data IsDim (a :: Nat) (b :: [Nat]) (c :: Bool)
- Harpie.Shape: data IsDims :: [Nat] -> [Nat] -> Exp Bool
+ Harpie.Shape: data IsDims (a :: [Nat]) (b :: [Nat]) (c :: Bool)
- Harpie.Shape: data IsFin :: Nat -> Nat -> Exp Bool
+ Harpie.Shape: data IsFin (a :: Nat) (b :: Nat) (c :: Bool)
- Harpie.Shape: data IsFins :: [Nat] -> [Nat] -> Exp Bool
+ Harpie.Shape: data IsFins (a :: [Nat]) (b :: [Nat]) (c :: Bool)
- Harpie.Shape: data IsSubset :: [Nat] -> [Nat] -> Exp Bool
+ Harpie.Shape: data IsSubset (a :: [Nat]) (b :: [Nat]) (c :: Bool)
- Harpie.Shape: data LastPos :: Nat -> [Nat] -> Exp Nat
+ Harpie.Shape: data LastPos (a :: Nat) (b :: [Nat]) (c :: Nat)
- Harpie.Shape: data Max :: a -> a -> Exp a
+ Harpie.Shape: data Max (b :: a) (c :: a) (d :: a)
- Harpie.Shape: data Min :: a -> a -> Exp a
+ Harpie.Shape: data Min (b :: a) (c :: a) (d :: a)
- Harpie.Shape: data MinDim :: [Nat] -> Exp [Nat]
+ Harpie.Shape: data MinDim (a :: [Nat]) (b :: [Nat])
- Harpie.Shape: data Minimum :: [a] -> Exp a
+ Harpie.Shape: data Minimum (b :: [a]) (c :: a)
- Harpie.Shape: data ModifyDim :: Nat -> (Nat -> Exp Nat) -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data ModifyDim (a :: Nat) (b :: Nat -> Exp Nat) (c :: [Nat]) (d :: [Nat])
- Harpie.Shape: data PreDeletePositions :: [Nat] -> Exp [Nat]
+ Harpie.Shape: data PreDeletePositions (a :: [Nat]) (b :: [Nat])
- Harpie.Shape: data PreInsertPositions :: [Nat] -> Exp [Nat]
+ Harpie.Shape: data PreInsertPositions (a :: [Nat]) (b :: [Nat])
- Harpie.Shape: data Range :: Nat -> Exp [Nat]
+ Harpie.Shape: data Range (a :: Nat) (b :: [Nat])
- Harpie.Shape: data Rank :: [a] -> Exp Natural
+ Harpie.Shape: data Rank (b :: [a]) (c :: Natural)
- Harpie.Shape: data Reorder :: [Nat] -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data Reorder (a :: [Nat]) (b :: [Nat]) (c :: [Nat])
- Harpie.Shape: data ReorderOk :: [Nat] -> [Nat] -> Exp Bool
+ Harpie.Shape: data ReorderOk (a :: [Nat]) (b :: [Nat]) (c :: Bool)
- Harpie.Shape: data Rerank :: Nat -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data Rerank (a :: Nat) (b :: [Nat]) (c :: [Nat])
- Harpie.Shape: data () => SNat (n :: Nat)
+ Harpie.Shape: data SNat (n :: Nat)
- Harpie.Shape: data SetDim :: Nat -> Nat -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data SetDim (a :: Nat) (b :: Nat) (c :: [Nat]) (d :: [Nat])
- Harpie.Shape: data SetDims :: [Nat] -> [Nat] -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data SetDims (a :: [Nat]) (b :: [Nat]) (c :: [Nat]) (d :: [Nat])
- Harpie.Shape: data () => SetIndex (b :: Nat) (c :: a) (d :: [a]) (e :: [a])
+ Harpie.Shape: data SetIndex (b :: Nat) (c :: a) (d :: [a]) (e :: [a])
- Harpie.Shape: data Size :: [Nat] -> Exp Nat
+ Harpie.Shape: data Size (a :: [Nat]) (b :: Nat)
- Harpie.Shape: data SliceOk :: Nat -> Nat -> Nat -> [Nat] -> Exp Bool
+ Harpie.Shape: data SliceOk (a :: Nat) (b :: Nat) (c :: Nat) (d :: [Nat]) (e :: Bool)
- Harpie.Shape: data SlicesOk :: [Nat] -> [Nat] -> [Nat] -> [Nat] -> Exp Bool
+ Harpie.Shape: data SlicesOk (a :: [Nat]) (b :: [Nat]) (c :: [Nat]) (d :: [Nat]) (e :: Bool)
- Harpie.Shape: data Squeeze :: [a] -> Exp [a]
+ Harpie.Shape: data Squeeze (b :: [a]) (c :: [a])
- Harpie.Shape: data TakeDim :: Nat -> Nat -> [Nat] -> Exp [Nat]
+ Harpie.Shape: data TakeDim (a :: Nat) (b :: Nat) (c :: [Nat]) (d :: [Nat])
- Harpie.Shape: fin :: forall n. KnownNat n => Int -> Fin n
+ Harpie.Shape: fin :: forall (n :: Nat). KnownNat n => Int -> Fin n
- Harpie.Shape: fins :: forall s. KnownNats s => [Int] -> Fins s
+ Harpie.Shape: fins :: forall (s :: [Nat]). KnownNats s => [Int] -> Fins s
- Harpie.Shape: fromSNats :: SNats s -> [Nat]
+ Harpie.Shape: fromSNats :: forall (s :: [Nat]). SNats s -> [Nat]
- Harpie.Shape: natVals :: forall ns proxy. KnownNats ns => proxy ns -> [Nat]
+ Harpie.Shape: natVals :: forall (ns :: [Nat]) proxy. KnownNats ns => proxy ns -> [Nat]
- Harpie.Shape: newtype Fin s
+ Harpie.Shape: newtype Fin (s :: k)
- Harpie.Shape: newtype Fins s
+ Harpie.Shape: newtype Fins (s :: k)
- Harpie.Shape: pattern SNats :: forall ns. () => KnownNats ns => SNats ns
+ Harpie.Shape: pattern SNats :: () => KnownNats ns => SNats ns
- Harpie.Shape: rankOf :: forall s. KnownNats s => Int
+ Harpie.Shape: rankOf :: forall (s :: [Nat]). KnownNats s => Int
- Harpie.Shape: safeFin :: forall n. KnownNat n => Int -> Maybe (Fin n)
+ Harpie.Shape: safeFin :: forall (n :: Nat). KnownNat n => Int -> Maybe (Fin n)
- Harpie.Shape: safeFins :: forall s. KnownNats s => [Int] -> Maybe (Fins s)
+ Harpie.Shape: safeFins :: forall (s :: [Nat]). KnownNats s => [Int] -> Maybe (Fins s)
- Harpie.Shape: sizeOf :: forall s. KnownNats s => Int
+ Harpie.Shape: sizeOf :: forall (s :: [Nat]). KnownNats s => Int
- Harpie.Shape: valueOf :: forall n. KnownNat n => Int
+ Harpie.Shape: valueOf :: forall (n :: Nat). KnownNat n => Int
- Harpie.Shape: valuesOf :: forall s. KnownNats s => [Int]
+ Harpie.Shape: valuesOf :: forall (s :: [Nat]). KnownNats s => [Int]
- Harpie.Shape: withKnownNats :: forall ns rep (r :: TYPE rep). SNats ns -> (KnownNats ns => r) -> r
+ Harpie.Shape: withKnownNats :: forall (ns :: [Nat]) r. SNats ns -> (KnownNats ns => r) -> r
- Harpie.Shape: withSomeSNats :: forall rep (r :: TYPE rep). [Nat] -> (forall s. SNats s -> r) -> r
+ Harpie.Shape: withSomeSNats :: [Nat] -> (forall (s :: [Nat]). () => SNats s -> r) -> r
Files
- harpie.cabal +165/−70
- src/Harpie/Fixed.hs +29/−35
- src/Harpie/Shape.hs +2/−0
- src/Harpie/Sort.hs +1/−0
- test/harpie-bug-issue1.hs +40/−0
harpie.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: harpie-version: 0.1.2.0+version: 0.1.3.0 license: BSD-3-Clause license-file: LICENSE copyright: Tony Day (c) 2016-2024@@ -11,91 +11,186 @@ bug-reports: https://github.com/tonyday567/harpie/issues synopsis: Haskell array programming. description:- This package provides Haskell array programming, interface and environment.+ This package provides Haskell array programming, interface and environment. - Module names clash with each other and with the Prelude.+ Module names clash with each other and with the Prelude. - == Usage+ == Usage - >>> import Harpie.Fixed qualified as F- >>> import Harpie.Shape qualified as S- >>> import Harpie.Array qualified as A+ >>> import Harpie.Fixed qualified as F+ >>> import Harpie.Shape qualified as S+ >>> import Harpie.Array qualified as A - >>> a = F.range @[2,3,4]- >>> F.shape a- [2,3,4]- >>> pretty a- [[[0,1,2,3],- [4,5,6,7],- [8,9,10,11]],- [[12,13,14,15],- [16,17,18,19],- [20,21,22,23]]]+ >>> a = F.range @[2,3,4]+ >>> F.shape a+ [2,3,4]+ >>> pretty a+ [[[0,1,2,3],+ [4,5,6,7],+ [8,9,10,11]],+ [[12,13,14,15],+ [16,17,18,19],+ [20,21,22,23]]] - >>> a = A.range [2,3,4]- >>> F.shape a- [2,3,4]- >>> pretty a- [[[0,1,2,3],- [4,5,6,7],- [8,9,10,11]],- [[12,13,14,15],- [16,17,18,19],- [20,21,22,23]]]+ >>> a = A.range [2,3,4]+ >>> F.shape a+ [2,3,4]+ >>> pretty a+ [[[0,1,2,3],+ [4,5,6,7],+ [8,9,10,11]],+ [[12,13,14,15],+ [16,17,18,19],+ [20,21,22,23]]] build-type: Simple tested-with:- , GHC == 9.10.1- , GHC == 9.8.2- , GHC == 9.6.5+ ghc ==9.6.7+ ghc ==9.8.4+ ghc ==9.10.2+ ghc ==9.12.2+ extra-doc-files:- ChangeLog.md- readme.md+ ChangeLog.md+ readme.md source-repository head- type: git- location: https://github.com/tonyday567/harpie+ type: git+ location: https://github.com/tonyday567/harpie common ghc-options-stanza- ghc-options:- -Wall- -Wcompat- -Widentities- -Wincomplete-record-updates- -Wincomplete-uni-patterns- -Wpartial-fields- -Wredundant-constraints+ ghc-options:+ -Wall+ -Wcompat+ -Widentities+ -Wincomplete-record-updates+ -Wincomplete-uni-patterns+ -Wpartial-fields+ -Wredundant-constraints common ghc2021-stanza- default-language: GHC2021+ default-language: GHC2021 +common ghc2024-stanza+ if impl(ghc >=9.10)+ default-language:+ GHC2024+ elif impl(ghc >=9.2)+ default-language:+ GHC2021++ default-extensions:+ DataKinds+ DerivingStrategies+ DisambiguateRecordFields+ ExplicitNamespaces+ GADTs+ LambdaCase+ MonoLocalBinds+ RoleAnnotations+ else+ default-language:+ Haskell2010++ default-extensions:+ BangPatterns+ BinaryLiterals+ ConstrainedClassMethods+ ConstraintKinds+ DeriveDataTypeable+ DeriveFoldable+ DeriveFunctor+ DeriveGeneric+ DeriveLift+ DeriveTraversable+ DoAndIfThenElse+ EmptyCase+ EmptyDataDecls+ EmptyDataDeriving+ ExistentialQuantification+ ExplicitForAll+ FlexibleContexts+ FlexibleInstances+ ForeignFunctionInterface+ GADTSyntax+ GeneralisedNewtypeDeriving+ HexFloatLiterals+ ImplicitPrelude+ InstanceSigs+ KindSignatures+ MonomorphismRestriction+ MultiParamTypeClasses+ NamedFieldPuns+ NamedWildCards+ NumericUnderscores+ PatternGuards+ PolyKinds+ PostfixOperators+ RankNTypes+ RelaxedPolyRec+ ScopedTypeVariables+ StandaloneDeriving+ StarIsType+ TraditionalRecordSyntax+ TupleSections+ TypeApplications+ TypeOperators+ TypeSynonymInstances++ if impl(ghc <9.2) && impl(ghc >=8.10)+ default-extensions:+ ImportQualifiedPost+ StandaloneKindSignatures+ library- import: ghc-options-stanza- import: ghc2021-stanza- hs-source-dirs: src- build-depends:- , QuickCheck >=2.14 && <2.16- , adjunctions >=4.0 && <5- , base >=4.14 && <5- , distributive >=0.4 && <0.7- , first-class-families >=0.8.1 && <0.9- , prettyprinter >=1.7 && <1.8- , quickcheck-instances >=0.3.31 && <0.4- , random >=1.2 && <1.4- , vector >=0.12.3 && <0.14- , vector-algorithms >=0.9.0 && <0.10- exposed-modules:- Harpie.Array- Harpie.Fixed- Harpie.Shape- Harpie.Sort+ import: ghc-options-stanza+ import: ghc2024-stanza+ hs-source-dirs: src+ build-depends:+ QuickCheck >=2.14 && <2.17,+ adjunctions >=4.0 && <5,+ base >=4.18 && <5,+ distributive >=0.4 && <0.7,+ first-class-families >=0.8.1 && <0.9,+ prettyprinter >=1.7 && <1.8,+ quickcheck-instances >=0.3.31 && <0.4,+ random >=1.2 && <1.4,+ vector >=0.12.3 && <0.14,+ vector-algorithms >=0.9.0 && <0.10, + exposed-modules:+ Harpie.Array+ Harpie.Fixed+ Harpie.Shape+ Harpie.Sort+ test-suite doctests- import: ghc2021-stanza- main-is: doctests.hs- hs-source-dirs: test- build-depends:- , base >=4.14 && <5- , doctest-parallel >=0.3 && <0.4- ghc-options: -threaded- type: exitcode-stdio-1.0+ import: ghc2024-stanza+ main-is: doctests.hs+ hs-source-dirs: test+ build-depends:+ base >=4.14 && <5,+ doctest-parallel >=0.3 && <0.5,++ ghc-options: -threaded+ type: exitcode-stdio-1.0++common ghc-options-exe-stanza+ ghc-options:+ -fforce-recomp+ -funbox-strict-fields+ -rtsopts+ -threaded+ -with-rtsopts=-N++executable harpie-bug-issue1+ import: ghc-options-exe-stanza+ import: ghc-options-stanza+ import: ghc2024-stanza+ main-is: harpie-bug-issue1.hs+ hs-source-dirs: test+ build-depends:+ adjunctions >=4.0 && <5,+ base >=4.14 && <5,+ first-class-families >=0.8.1 && <0.9,+ harpie,
src/Harpie/Fixed.hs view
@@ -190,6 +190,8 @@ invtri, inverse, chol,+ -- cross_,+ -- norm_, ) where @@ -228,7 +230,7 @@ -- >>> import Prelude hiding (cycle, repeat, take, drop, zipWith, length) -- >>> import Harpie.Fixed as F -- >>> import Harpie.Shape qualified as S--- >>> import Harpie.Shape (SNats (..), Fin (..), Fins (..))+-- >>> import Harpie.Shape (SNats, Fin (..), Fins (..)) -- >>> import GHC.TypeNats -- >>> import Data.List qualified as List -- >>> import Prettyprinter hiding (dot,fill)@@ -257,6 +259,8 @@ -- [[12,13,14,15], -- [16,17,18,19], -- [20,21,22,23]]]+-- >>> e = array @[3,3] @Double [4,12,-16,12,37,-43,-16,-43,98]+-- >>> l = chol e -- $usage --@@ -280,9 +284,10 @@ -- >>> import Data.Functor.Rep -- -- An important base accounting of 'Array' shape is the singleton types 'SNat' (a type-level 'Natural' or 'Nat') from [GHC.TypeNats](https://hackage.haskell.org/package/base/docs/GHC-TypeNats.html) in base.+-- -- >>> import GHC.TypeNats ----- The (first-class-families)[https://hackage.haskell.org/package/first-class-families] library was used to code most of function constraints.+-- The [first-class-families](https://hackage.haskell.org/package/first-class-families) library was used to code most of type-level constraint logic. -- -- >>> import Fcf qualified --@@ -353,6 +358,7 @@ -- [1,2,3,4,5,6] -- -- The main computational entry and exit points are often via 'index' and 'tabulate' with arrays indexed by 'Fins':+-- -- >>> index a (S.UnsafeFins [1,2,3]) -- 23 --@@ -411,7 +417,7 @@ -- Note that conversion of an 'Array' to a vector drops shape information, so that: -- -- > vectorAs . asVector == id--- > asVector . vectorAs == flat+-- > asVector . vectorAs == 'flat' -- -- >>> asVector (range @[2,3]) -- [0,1,2,3,4,5]@@ -459,7 +465,7 @@ where a = unsafeArray v --- | Construct an Array, checking shape.+-- | Construct an Array, throwing an exception on a bad shape. -- -- >>> array [0..22] :: Array [2,3,4] Int -- *** Exception: Shape Mismatch@@ -486,7 +492,7 @@ unsafeModifyVector :: (KnownNats s) => (FromVector u a) => (FromVector v b) => (u -> v) -> Array s a -> Array s b unsafeModifyVector f a = unsafeArray (asVector (f (vectorAs (asVector a)))) --- | Representation of an index into a shape (a type-level [Nat]). The index is a dimension of the shape.+-- | Representation of an index into a shape (a type-level [Nat]). 'Dim @0' is commonly thought of as the row of an array. type Dim = SNat -- | Pattern synonym for a 'Dim'@@ -537,8 +543,8 @@ -- -- The library design encourages the use of value-level shape arrays (in @Harpie.Array@) via 'toDynamic' in preference to dependent-type styles of coding. In particular, no attempt has been made to prove to the compiler that a particular Shape (resulting from any of the supplied functions) exists. Life is short. ----- > P.take 4 <$> sample' arbitrary :: IO [SomeArray Int]--- [SomeArray SNats @'[] [0],SomeArray SNats @'[0] [],SomeArray SNats @[1, 1] [1],SomeArray SNats @[5, 1, 4] [2,1,0,2,-6,0,5,6,-1,-4,0,5,-1,6,4,-6,1,0,3,-1]]+-- >> P.take 4 <$> sample' arbitrary :: IO [SomeArray Int]+-- >> [SomeArray SNats @'[] [0],SomeArray SNats @'[0] [],SomeArray SNats @[1, 1] [1],SomeArray SNats @[5, 1, 4] [2,1,0,2,-6,0,5,6,-1,-4,0,5,-1,6,4,-6,1,0,3,-1]] data SomeArray a = forall s. SomeArray (SNats s) (Array s a) deriving instance (Show a) => Show (SomeArray a)@@ -549,7 +555,7 @@ instance Foldable SomeArray where foldMap f (SomeArray _ a) = foldMap f a --- | Contruct a SomeArray+-- | Construct a SomeArray someArray :: forall s t a. (FromVector t a) => SNats s -> t -> SomeArray a someArray s t = SomeArray s (Array (asVector t)) @@ -1215,7 +1221,7 @@ Array s' a takes _ _ a = unsafeBackpermute id a --- | Across the specified dimesnions, takes the bottom-most elements.+-- | Across the specified dimensions, takes the bottom-most elements. -- -- >>> pretty (takeBs (Dims @[0,1]) (S.SNats @[1,2]) a) -- [[[16,17,18,19],@@ -1282,6 +1288,8 @@ -- -- >>> pretty $ indexes (Dims @[0,1]) (S.UnsafeFins [1,1]) a -- [16,17,18,19]+-- >>> F.indexes (S.SNats @'[1]) (S.fins @'[3] [1]) (F.range @[2,3])+-- [1,4] indexes :: forall s' s ds xs a. ( KnownNats s,@@ -2804,29 +2812,15 @@ -- [-8.0,5.0,3.0]] -- >>> mult (chol e) (transpose (chol e)) == e -- True-chol :: (KnownNat m, Floating a) => Matrix m m a -> Matrix m m a-chol a =- let l =- unsafeTabulate- ( \[i, j] ->- bool- ( 1- / unsafeIndex l [j, j]- * ( unsafeIndex a [i, j]- - sum- ( (\k -> unsafeIndex l [i, k] * unsafeIndex l [j, k])- <$> ([0 .. (j - 1)] :: [Int])- )- )- )- ( sqrt- ( unsafeIndex a [i, i]- - sum- ( (\k -> unsafeIndex l [j, k] ^ (2 :: Int))- <$> ([0 .. (j - 1)] :: [Int])- )- )- )- (i == j)- )- in l+chol :: (KnownNat m, Floating a, KnownNats '[m, m]) => Matrix m m a -> Matrix m m a+chol a = l+ where+ l = tabulate (\s -> norm_ 1 l s (index a s - cross_ l s))++norm_ :: (Floating a, KnownNat m) => Int -> Matrix m m a -> Fins '[m, m] -> a -> a+norm_ d l (UnsafeFins s) = bool (1 / diag l ! [S.getDim d s] *) sqrt (S.isDiag s)++cross_ :: (Num a, KnownNat m) => Matrix m m a -> Fins '[m, m] -> a+cross_ l s = sum (fmap (\k -> l ! [i, k] * l ! [j, k]) (A.range [j]))+ where+ [i, j] = fromFins s
src/Harpie/Shape.hs view
@@ -178,6 +178,8 @@ import GHC.TypeNats import Prelude as P hiding (minimum) +{-# ANN module ("doctest-parallel: --no-implicit-module-import" :: String) #-}+ -- $setup -- >>> :set -XDataKinds -- >>> :set -XTypeFamilies
src/Harpie/Sort.hs view
@@ -16,6 +16,7 @@ -- $setup -- >>> :m -Prelude+-- >>> import Harpie.Sort -- >>> import Data.Vector qualified as V -- >>> import Data.Ord (Down (..)) -- >>> import Prelude (Int)
+ test/harpie-bug-issue1.hs view
@@ -0,0 +1,40 @@+{-# LANGUAGE DataKinds #-}+{-# OPTIONS_GHC -Wno-redundant-constraints #-}++module Main where++import Data.Functor.Rep (index, tabulate)+import Fcf qualified+import Harpie.Fixed qualified as F+import Harpie.Shape qualified as S++-- | bug-issue1+--+-- >>> F.indexes (S.SNats @'[1]) (S.fins @'[3] [1]) (range @[2,3])+main :: IO ()+main = do+ putStrLn $ "using module functions: " <> show x+ putStrLn $ "using inplace functions:" <> show x'+ where+ a = F.range @[2, 3]+ x = F.indexes (S.SNats @'[1]) (S.fins @'[3] [1]) a+ x' = F.indexes (S.SNats @'[1]) (S.fins @'[3] [1]) (range @[2, 3])++range :: forall s. (S.KnownNats s) => F.Array s Int+range = tabulate (S.flatten (S.valuesOf @s) . S.fromFins)++indexes ::+ forall s' s ds xs a.+ ( S.KnownNats s,+ S.KnownNats s',+ s' ~ Fcf.Eval (S.DeleteDims ds s),+ xs ~ Fcf.Eval (S.GetDims ds s)+ ) =>+ F.Dims ds ->+ S.Fins xs ->+ F.Array s a ->+ F.Array s' a+indexes S.SNats xs a = F.unsafeBackpermute (S.insertDims (S.valuesOf @ds) (S.fromFins xs)) a++unsafeBackpermute :: forall s' s a. (S.KnownNats s, S.KnownNats s') => ([Int] -> [Int]) -> F.Array s a -> F.Array s' a+unsafeBackpermute f a = tabulate (index a . S.UnsafeFins . f . S.fromFins)