{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-----------------------------------------------------------------------------
-- |
-- Module : Foreign.BLAS.Types
-- Copyright : Copyright (c) 2010, Patrick Perry <patperry@gmail.com>
-- License : BSD3
-- Maintainer : Patrick Perry <patperry@gmail.com>
-- Stability : experimental
--
module Foreign.BLAS.Types (
BLASTrans(..),
Trans(..),
withTrans,
BLASUplo(..),
Uplo(..),
withUplo,
BLASDiag(..),
Diag(..),
withDiag,
BLASSide(..),
Side(..),
withSide,
LAInt(..),
) where
import Foreign
import Foreign.C.Types
import Foreign.C.String
newtype BLASTrans = BLASTrans CString
data Trans = NoTrans | Trans | ConjTrans deriving (Eq, Show)
withTrans :: Trans -> (BLASTrans -> IO a) -> IO a
withTrans trans f = flip withCString (f . BLASTrans) $ case trans of
NoTrans -> "N"
Trans -> "T"
ConjTrans -> "C"
newtype BLASUplo = BLASUplo CString
data Uplo = Upper | Lower deriving (Eq, Show)
withUplo :: Uplo -> (BLASUplo -> IO a) -> IO a
withUplo uplo f = flip withCString (f . BLASUplo) $ case uplo of
Upper -> "U"
Lower -> "L"
newtype BLASSide = BLASSide CString
data Side = LeftSide | RightSide deriving (Eq, Show)
withSide :: Side -> (BLASSide -> IO a) -> IO a
withSide side f = flip withCString (f . BLASSide) $ case side of
LeftSide -> "L"
RightSide -> "R"
newtype BLASDiag = BLASDiag CString
data Diag = NonUnit | Unit deriving (Eq, Show)
withDiag :: Diag -> (BLASDiag -> IO a) -> IO a
withDiag diag f = flip withCString (f . BLASDiag) $ case diag of
NonUnit -> "N"
Unit -> "U"
newtype LAInt = LAInt CInt deriving (Eq, Show, Enum, Num, Ord, Storable)