module Data.Repa.Array.Internals.Layout (Layout (..), LayoutI) where import Data.Repa.Array.Internals.Shape -- | A layout provides a total order on the elements of an index space. -- -- We can talk about the n-th element of an array, independent of its -- shape and dimensionality. -- class Shape (Index l) => Layout l where -- | Short name for a layout which does not include details of -- the exact extent. data Name l -- | Type used to index into this array layout. type Index l -- | O(1). Proxy for the layout name. name :: Name l -- | O(1). Create a default layout of the given extent. create :: Name l -> Index l -> l -- | O(1). Yield the extent of the layout. extent :: l -> Index l -- | O(1). Convert a polymorphic index to a linear one. toIndex :: l -> Index l -> Int -- | O(1). Convert a linear index to a polymorphic one. fromIndex :: l -> Int -> Index l type LayoutI l = (Layout l, Index l ~ Int)