{-# LANGUAGE CPP, DataKinds, GeneralizedNewtypeDeriving, KindSignatures, ScopedTypeVariables, TypeOperators #-} -- | Column types module Frames.Col where #if __GLASGOW_HASKELL__ < 800 import Data.Monoid #endif import Data.Proxy import GHC.TypeLits -- | A column's type includes a textual name and the data type of each -- element. newtype (:->) (s::Symbol) a = Col { getCol :: a } deriving (Eq,Ord,Num,Monoid,Real,RealFloat,RealFrac,Fractional,Floating) instance forall s a. (KnownSymbol s, Show a) => Show (s :-> a) where show (Col x) = symbolVal (Proxy::Proxy s)++" :-> "++show x -- | Used only for a show instance that parenthesizes the value. newtype Col' s a = Col' (s :-> a) -- | Helper for making a 'Col'' col' :: a -> Col' s a col' = Col' . Col instance (KnownSymbol s, Show a) => Show (Col' s a) where show (Col' c) = "(" ++ show c ++ ")"