module LLVM.Core.Data (
IntN(..), WordN(..), FP128(..),
Array(..), Vector(..), Label, Struct(..), PackedStruct(..),
FixedList,
) where
import qualified LLVM.Core.UnaryVector as UnaryVector
import LLVM.Core.UnaryVector (FixedList)
import qualified Type.Data.Num.Decimal.Proof as DecProof
import qualified Type.Data.Num.Decimal.Number as Dec
import qualified Data.Foldable as Fold
import Data.Typeable (Typeable)
newtype IntN n = IntN Integer
deriving (Show, Typeable)
newtype WordN n = WordN Integer
deriving (Show, Typeable)
newtype FP128 = FP128 Rational
deriving (Show, Typeable)
newtype Array n a = Array [a]
deriving (Show, Typeable)
newtype Vector n a = Vector (FixedList (Dec.ToUnary n) a)
instance (Dec.Natural n, Show a) => Show (Vector n a) where
showsPrec p (Vector xs) =
case DecProof.unaryNat :: DecProof.UnaryNat n of
DecProof.UnaryNat ->
showParen (p>10) $
showString "Vector " .
showList (Fold.toList
(UnaryVector.fromFixedList xs
:: UnaryVector.T (Dec.ToUnary n) a))
data Label
deriving (Typeable)
newtype Struct a = Struct a
deriving (Show, Typeable)
newtype PackedStruct a = PackedStruct a
deriving (Show, Typeable)