-----------------------------------------------------------------------------
-- |
-- Module      :  Numeric.Dimensions
-- Copyright   :  (c) Artem Chirkin
-- License     :  BSD3
--
-- Maintainer  :  chirkin@arch.ethz.ch
--
-- Provides a set of data types to define and traverse through multiple dimensions.
-- The core types are `Dim ds` and `Idx ds`, which fix dimension sizes at compile time.
--
-- Lower indices go first, i.e. assumed enumeration
--          is i = i1 + i2*n1 + i3*n1*n2 + ... + ik*n1*n2*...*n(k-1).
-- This is also to encourage column-first matrix enumeration and array layout.
--
-----------------------------------------------------------------------------

module Numeric.Dimensions
  ( module Numeric.Dimensions.List
  , module Numeric.Dimensions.Dim
  , module Numeric.Dimensions.Idx
  , Evidence (..), withEvidence, sumEvs, (+!+)
  ) where

import Numeric.Dimensions.List
import Numeric.Dimensions.Dim
import Numeric.Dimensions.Idx
import Numeric.TypeLits