-----------------------------------------------------------------------------
-- |
-- Module      :  Numeric.Dimensions
-- Copyright   :  (c) Artem Chirkin
-- License     :  BSD3
--
--
-- Provides a set of data types to define and traverse through multiple dimensions.
-- The core types are `Dims ds` and `Idxs ds`,
--   which fix dimension sizes at compile time.
--
-- Higher indices go first, i.e. assumed enumeration
--          is i = i1*n1*n2*...*n(k-1) + ... + i(k-2)*n1*n2 + i(k-1)*n1 + ik
-- This corresponds to row-first layout of matrices and multidimenional arrays.
--
-----------------------------------------------------------------------------

module Numeric.Dimensions
  ( module Numeric.Dimensions.Dim
  , module Numeric.Dimensions.Idx
  , module Data.Type.List
  , module Data.Constraint
  ) where

import Data.Constraint         ((:-) (..), Dict (..), mapDict, (\\))
import Data.Type.List
import Numeric.Dimensions.Dim
import Numeric.Dimensions.Idx