data AllPos : All Shp cs -> TypeNil : AllPos [](::) : Pos c s -> AllPos ss -> AllPos (s :: ss)head : AllPos (s :: ss) -> c .Pos stail : AllPos (s :: ss) -> AllPos ssdata AnyPos : All Shp cs -> TypeHere : c .Pos s -> AnyPos (s :: ss)There : AnyPos ss -> AnyPos (s :: ss)data AnyShpPos : Any Shp cs -> TypeOnce we pick a particular shape, we're forced to pick that position
Here : c .Pos s -> AnyShpPos (Here s)There : AnyShpPos ss -> AnyShpPos (There ss)data AllPos : All Shp cs -> TypeNil : AllPos [](::) : Pos c s -> AllPos ss -> AllPos (s :: ss)head : AllPos (s :: ss) -> c .Pos stail : AllPos (s :: ss) -> AllPos ssdata AnyPos : All Shp cs -> TypeHere : c .Pos s -> AnyPos (s :: ss)There : AnyPos ss -> AnyPos (s :: ss)data AnyShpPos : Any Shp cs -> Type