It seems like it would be nice for Vector to have the same (or as close as possible) interface as Vec. Currenly Vector has only a non-dependent foldr and foldl. It would be easy to define dependent foldr / foldl and specialize them to the non-dependent foldr' / foldl', like the way it is handled for Vec. Moreover, there are some properties, foldr-universal, foldr-fusion, etc, which are altogether missing for Vector (in dependent or non-dependent form), and would be nice to have in Data.Vec.Functional.Properties. Here's a dependent foldr for Vector:
foldr
: {a b : Level} {A : Set a} (B : ℕ → Set b)
→ ({k : ℕ} → A → B k → B (suc k))
→ B zero
→ {n : ℕ}
→ Vector A n
→ B n
foldr _ _ e {zero} v = e
foldr B f e {suc n} v = f (head v) (foldr B f e (tail v))
The foldr-congs in Data.Vec.Functional.Relation.Binary.Pointwise.Properties and Data.Vec.Functional.Relation.Binary.Equality.Setoid could also be dependent-ized.
I wanted to make sure some changes along these lines would be welcome before starting work on a pull request. I'm realizing as I write this, though, that using the same naming scheme as Vec would be a breaking change, since all the uses of foldr would then expect an extra argument.
It seems like it would be nice for
Vectorto have the same (or as close as possible) interface asVec. CurrenlyVectorhas only a non-dependentfoldrandfoldl. It would be easy to define dependentfoldr/foldland specialize them to the non-dependentfoldr'/foldl', like the way it is handled forVec. Moreover, there are some properties,foldr-universal,foldr-fusion, etc, which are altogether missing forVector(in dependent or non-dependent form), and would be nice to have inData.Vec.Functional.Properties. Here's a dependentfoldrforVector:The
foldr-congs inData.Vec.Functional.Relation.Binary.Pointwise.PropertiesandData.Vec.Functional.Relation.Binary.Equality.Setoidcould also be dependent-ized.I wanted to make sure some changes along these lines would be welcome before starting work on a pull request. I'm realizing as I write this, though, that using the same naming scheme as
Vecwould be a breaking change, since all the uses offoldrwould then expect an extra argument.