Safe Haskell | None |
---|
Subwords span upper triangular tables. A subword (i,j) is legal iff i<=j.
NOTE Using more complicated shapes has a number of benefits. We don't need to specify triangular or rectangular tables anymore. A rectangular one-dimensional table with a subword as shape actually does create space as required for subwords.
TODO subword indexing is currently hardcoded to be zero-based. See
subwordIndex
.
TODO consider replacing (quot
2) with (shiftR
1)
TODO all the QuickCheck stuff is missing
Documentation
A subword wraps a simple pair.
Subwords always yield the upper-triangular part of a rect-angular array.
This gives the quite curious effect that (0,N) points to the `largest'
index, while (0,0) and (N,N) both point to the smallest. We do, however, use
(0,0) as the smallest as (0,k) gives successively smaller upper triangular
parts.
Eq Subword | |
Ord Subword | |
Show Subword | |
Arbitrary Subword | |
NFData Subword | |
Unbox Subword | |
Vector Vector Subword | |
MVector MVector Subword | |
(PrimMonad m, Stack m Subword xs, MPrimArrayOps arr (:. Z Subword) e) => Stack m Subword (:. xs (SubwordNonTerminal m arr e)) | |
(Monad m, MPrimArrayOps arr (:. Z Subword) e, Stack m Subword (:. xs (SubwordNonTerminal m arr e))) => UpperTriS m (:. xs (SubwordNonTerminal m arr e)) | |
Arbitrary z => Arbitrary (:. z Subword) | |
Shape sh => Shape (:. sh Subword) | Some weird things are going on here. Adding subwords (i,j) and (k,l) yields (i+k,j+l). Normally i==k==0 when calculating space requirements. If you have a subword (3,10) and want the next outer one add (-1,1) and you get what you want. We make NO(!) check that the final subword contains only non-negative indices. |
ExtShape sh => ExtShape (:. sh Subword) |
triangularNumber :: Int -> IntSource
triangular numbers
A000217
upperTri :: Subword -> IntSource
Size of an upper triangle starting at i
and ending at j
. (0,N) what
be the normal thing to use.
subwordIndex :: Subword -> Subword -> IntSource
subwordFromIndex :: Subword -> Int -> SubwordSource