module D3JS.Type where
import Data.Text (Text)
import qualified Data.Text as T
import Prelude hiding ((.),id)
import Control.Category
data Chain a b where
Val :: Var -> Chain () b
Val' :: (Reifiable b) => b -> Chain () b
Val'' :: Var' b -> Chain () b
Func :: JSFunc a params b -> Chain a b
Concat :: Chain c b -> Chain a c -> Chain a b
Nil :: Chain a a
instance Category Chain where
id = Nil
(.) = Concat
type Var = Text
type Selector = Text
data Data1D = Data1D [Double]
data Data2D = Data2D [(Double,Double)]
data Selection = Selection
data SelData a = SelData
data Transition = Transition
class Reifiable a where
reify :: a -> Text
class Sel a
instance Sel Selection
instance Sel (SelData a)
class Sel2 a
instance Sel2 Selection
instance Sel2 (SelData a)
instance Sel2 (Chain () b)
data JSFunc a c b = JSFunc FuncName [JSParam]
type FuncName = Text
data JSParam = ParamVar Var | PText Text | PDouble Double | PFunc FuncDef
data FuncDef = FuncTxt Text | forall r. FuncExp (NumFunc r)
data NumFunc r where
NInt :: Int -> NumFunc Int
NDouble :: Double -> NumFunc Double
Add :: NumFunc r -> NumFunc r -> NumFunc r
Subt :: NumFunc r -> NumFunc r -> NumFunc r
Mult :: NumFunc r -> NumFunc r -> NumFunc r
Div :: NumFunc r -> NumFunc r -> NumFunc r
Index :: Int -> NumFunc [r] -> NumFunc r
Field :: Text -> NumFunc a -> NumFunc r
NVar :: Var -> NumFunc r
DataParam :: NumFunc r
data Var' dat = Var' Var