, IsCommonExprSet
, Constant(..)
- , IsVarName(..)
+ , IsVarName
, Variable(..)
, IsVariableSet
, CommonUnaryOp(..)
where
import Data.HList
+import Data.HList.String
-- MentionedVars
class (Show es, Eq es, HList es) => IsExprSet es
instance IsExprSet HNil
-instance (IsExpr e, IsExprSet es) => IsExprSet (e :*: es)
+instance (IsExpr e, IsExprSet es) => IsExprSet (HCons e es)
class (Show es, Eq es, HList es) => IsCommonExprSet es
instance IsCommonExprSet HNil
-instance (IsCommonExpr e, IsCommonExprSet es) => IsCommonExprSet (e :*: es)
+instance (IsCommonExpr e, IsCommonExprSet es) => IsCommonExprSet (HCons e es)
-- Constants and variable names
instance MentionedVars Constant where
type MentionedVarsOf Constant = HNil
-class (Show a, Eq a, Ord a) => IsVarName a where
- varName :: a -> String
+{- This is what we want to do but GHC can't handle this for now.
+class ( (HLengthOf a :<=: D255) ~ True
+ , HString a
+ )
+ => IsVarName a
+-}
+class HString a => IsVarName a
data Variable vn
= Variable !vn
class HList vs => IsVariableSet vs
instance IsVariableSet HNil
-instance (IsVarName v, IsVariableSet vs) => IsVariableSet (v :*: vs)
+instance (IsVarName v, IsVariableSet vs) => IsVariableSet (HCons v vs)
-- Common operators
data CommonUnaryOp a
deriving (Show, Eq, Ord)
instance (IsVarName vn, IsExpr a) => IsExpr (TrendOp vn a)
instance (IsVarName vn, IsCommonExpr a) => IsCommonExpr (TrendOp vn a)
-instance (IsVarName vn, MentionedVars a) => MentionedVars (TrendOp vn a) where
+
+instance ( IsVariableSet (vn :*: MentionedVarsOf a)
+ ) => MentionedVars (TrendOp vn a) where
type MentionedVarsOf (TrendOp vn a) = vn :*: MentionedVarsOf a
data VariableShiftPredictOp ss w vn
=> IsExpr (VariableShiftPredictOp ss w vn)
instance (IsExprSet ss, IsCommonExprSet ss, IsCommonExpr w, IsVarName vn)
=> IsCommonExpr (VariableShiftPredictOp ss w vn)
-instance ( IsVarName vn
- , IsVariableSet (MentionedVarsOf ss :++: MentionedVarsOf w)
+instance ( IsVariableSet (vn :*: (MentionedVarsOf ss :++: MentionedVarsOf w))
) => MentionedVars (VariableShiftPredictOp ss w vn) where
type MentionedVarsOf (VariableShiftPredictOp ss w vn)
= vn :*: (MentionedVarsOf ss :++: MentionedVarsOf w)
instance (IsCommonExpr sm, IsCommonExpr w, IsVarName vn)
=> IsCommonExpr (FixedShiftPredictOp sm w vn)
-instance ( IsVarName vn
- , IsVariableSet (MentionedVarsOf sm :++: MentionedVarsOf w)
+instance ( IsVariableSet (vn :*: (MentionedVarsOf sm :++: MentionedVarsOf w))
) => MentionedVars (FixedShiftPredictOp sm w vn) where
type MentionedVarsOf (FixedShiftPredictOp sm w vn)
= vn :*: (MentionedVarsOf sm :++: MentionedVarsOf w)