module Numeric.LAPACK.Matrix.Extent (
   Extent.C(switchTag), Small, Big,
   Extent.Measure(switchMeasure), Shape, Size,
   Measured(switchMeasured),
   Extent.Extent,
   Map,
   Extent.height,
   Extent.width,
   Extent.squareSize,
   Extent.dimensions,
   Extent.transpose,
   Extent.fuse,
   Extent.MultiplyMeasure,

   Extent.square,

   toGeneral,
   fromSquare,
   fromSquareLiberal,
   fromLiberalSquare,
   generalizeTall,
   generalizeWide,
   weakenTall,
   weakenWide,

   Extent.AppendMode,
   Extent.appendSame,
   Extent.appendLeft,
   Extent.appendRight,
   Extent.Append,
   Extent.appendAny,
   ) where

import qualified Numeric.LAPACK.Matrix.Extent.Private as Extent
import Numeric.LAPACK.Matrix.Extent.Strict (Map(Map), Measured(..))
import Numeric.LAPACK.Matrix.Extent.Private
         (C, Measure, Small, Big, Shape, Size)


toGeneral ::
   (Measure meas, C vert, C horiz) =>
   Map meas vert horiz Size Big Big height width
toGeneral = Map Extent.toGeneral

fromSquare ::
   (Measured meas vert, Measured meas horiz) =>
   Map Shape Small Small meas vert horiz size size
fromSquare = Map Extent.fromSquare

fromSquareLiberal ::
   (Measured meas vert, Measured meas horiz) =>
   Map Shape Small Small meas vert horiz height width
fromSquareLiberal = Map Extent.fromSquareLiberal

fromLiberalSquare ::
   (C vert, C horiz) =>
   Map Size Small Small Size vert horiz height width
fromLiberalSquare = Map Extent.fromLiberalSquare

generalizeTall ::
   (Measure meas, C vert, C horiz) =>
   Map meas vert Small Size vert horiz height width
generalizeTall = Map Extent.generalizeTall

generalizeWide ::
   (Measure meas, C vert, C horiz) =>
   Map meas Small horiz Size vert horiz height width
generalizeWide = Map Extent.generalizeWide

weakenTall ::
   (Measured meas horiz, C vert) =>
   Map meas vert Small meas vert horiz height width
weakenTall = Map Extent.weakenTall

weakenWide ::
   (Measured meas vert, C horiz) =>
   Map meas Small horiz meas vert horiz height width
weakenWide = Map Extent.weakenWide