{- | 
This module contains some datatypes and functions that are used at various stages in the compiler.
-}
module Database.Ferry.Common.Data.Base where

-- | Identifiers are represented as strings    
type Identifier = String

-- | Constant values
data Const = CInt Integer
           | CFloat Double
           | CBool Bool
           | CString String
           | CUnit
    deriving (Show, Eq)

-- | Type class for extracting all variables that occur in a value of type a
class VarContainer a where
    vars :: a -> [Identifier]

-- | Print constants    
toString :: Const -> String
toString (CInt i) = show i
toString (CFloat d) = show d
toString (CBool b) = show b
toString (CString s) = s
toString (CUnit) = "()"