{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE GADTs #-} module Numeric.LAPACK.Matrix.Extent.Kind where data General height width = General { generalHeight :: height, generalWidth :: width } deriving (Eq, Show) data Tall height width = Tall { tallHeight :: height, tallWidth :: width } deriving (Eq, Show) data Wide height width = Wide { wideHeight :: height, wideWidth :: width } deriving (Eq, Show) data Square height width = (height ~ width) => Square { squareSize :: height } instance (Eq height, Eq width) => Eq (Square height width) where Square a == Square b = a==b instance (Show height, Show width) => Show (Square height width) where showsPrec p (Square s) = showParen (p>10) (showString "Square " . showsPrec 11 s)