module Blas.Primitive.Types
( Order(..)
, Transpose(..)
, Uplo(..)
, Diag(..)
, Side(..)
) where
import Prelude hiding (Either(Left, Right))
import Data.Ix (Ix)
data Order = RowMajor
| ColMajor
deriving (Bounded, Eq, Ix, Ord, Read, Show)
instance Enum Order where
fromEnum RowMajor = 101
fromEnum ColMajor = 102
toEnum 101 = RowMajor
toEnum 102 = ColMajor
toEnum x = error $ "Order.toEnum: Cannot match " ++ show x
data Transpose = NoTrans
| Trans
| ConjTrans
deriving (Bounded, Eq, Ix, Ord, Read, Show)
instance Enum Transpose where
fromEnum NoTrans = 111
fromEnum Trans = 112
fromEnum ConjTrans = 113
toEnum 111 = NoTrans
toEnum 112 = Trans
toEnum 113 = ConjTrans
toEnum x = error $ "Transpose.toEnum: Cannot match " ++ show x
data Uplo = Upper
| Lower
deriving (Bounded, Eq, Ix, Ord, Read, Show)
instance Enum Uplo where
fromEnum Upper = 121
fromEnum Lower = 122
toEnum 121 = Upper
toEnum 122 = Lower
toEnum x = error $ "Uplo.toEnum: Cannot match " ++ show x
data Diag = NonUnit
| Unit
deriving (Bounded, Eq, Ix, Ord, Read, Show)
instance Enum Diag where
fromEnum NonUnit = 131
fromEnum Unit = 132
toEnum 131 = NonUnit
toEnum 132 = Unit
toEnum x = error $ "Diag.toEnum: Cannot match " ++ show x
data Side = Left
| Right
deriving (Bounded, Eq, Ix, Ord, Read, Show)
instance Enum Side where
fromEnum Left = 141
fromEnum Right = 142
toEnum 141 = Left
toEnum 142 = Right
toEnum x = error $ "Side.toEnum: Cannot match " ++ show x