{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE LambdaCase #-} {-# language TemplateHaskell #-} {-# options_ghc -Wno-unused-imports #-} module Data.Generics.Encode.Internal.Prim (VP(..), vpInt, vpBool, vpFloat, vpDouble, vpScientific, vpChar, vpString, vpText, vpOneHot) where import Data.Int (Int8, Int16, Int32, Int64) import Data.Word (Word, Word8, Word16, Word32, Word64) import qualified GHC.Generics as G -- hashable import Data.Hashable (Hashable(..)) -- microlens-th import Lens.Micro.TH (makeLenses) -- scientific import Data.Scientific (Scientific) -- text import Data.Text (Text, unpack) import Data.Generics.Encode.OneHot (OneHot, mkOH) -- | Primitive types -- -- NB : this is just a convenience for unityping the dataframe contents, but it should not be exposed to the library users data VP = VPInt { _vpInt :: Int } -- ^ 'Int' | VPInt8 Int8 -- ^ 'Int8' | VPInt16 Int16 -- ^ 'Int16' | VPInt32 Int32 -- ^ 'Int32' | VPInt64 Int64 -- ^ 'Int64' | VPWord Word -- ^ 'Word' | VPWord8 Word8 -- ^ 'Word8' | VPWord16 Word16 -- ^ 'Word16' | VPWord32 Word32 -- ^ 'Word32' | VPWord64 Word64 -- ^ 'Word64' | VPBool { _vpBool :: Bool } -- ^ 'Bool' | VPFloat { _vpFloat :: Float } -- ^ 'Float' | VPDouble { _vpDouble :: Double } -- ^ 'Double' | VPScientific { _vpScientific :: Scientific } -- ^ 'Scientific' | VPChar { _vpChar :: Char } -- ^ 'Char' | VPString { _vpString :: String } -- ^ 'String' | VPText { _vpText :: Text } -- ^ 'Text' | VPOH { _vpOneHot :: OneHot Int } -- ^ 1-hot encoding of an enum value | VPUnit deriving (Eq, Ord, G.Generic) instance Hashable VP makeLenses ''VP instance Show VP where show = \case VPInt x -> show x VPInt8 x -> show x VPInt16 x -> show x VPInt32 x -> show x VPInt64 x -> show x VPWord x -> show x VPWord8 x -> show x VPWord16 x -> show x VPWord32 x -> show x VPWord64 x -> show x VPBool b -> show b VPFloat f -> show f VPDouble d -> show d VPScientific s -> show s VPChar d -> pure d VPString s -> s VPText t -> unpack t VPOH oh -> show oh VPUnit -> show ()