-
[clean-tests.git] / old / dyneditors / DynamicEditor.dcl
1 definition module DynamicEditor
2
3 // TODO: quantified variables with constraints?
4
5 import iTasks
6
7 :: DynamicEditor a =: DynamicEditor [DynamicCons]
8 // phantom type only needed for top level
9 :: DynamicEditorValue a = DynamicEditorValue !DynamicConsId !DEVal
10
11 :: DEVal = DEApplication ![(!DynamicConsId, !DEVal)]
12 | DEJSONValue !JSONNode
13
14 derive class iTask DynamicEditorValue
15
16 :: DynamicCons
17 :: DynamicConsOption = HideIfOnlyChoice
18
19 (<<@@@) infixl 2 :: !DynamicCons !DynamicConsOption -> DynamicCons
20 (@@@>>) infixr 2 :: !DynamicConsOption !DynamicCons -> DynamicCons
21
22 :: DynamicConsId :== String
23 :: DynamicConsBuilder = FunctionCons !Dynamic
24 | E.a: CustomEditorCons !(Editor a) & JSONEncode{|*|}, JSONDecode{|*|}, gText{|*|}, TC a
25 | ListCons !Dynamic //* must contain a value of type [a] -> b
26
27 functionCons :: !String !String !a -> DynamicCons | TC a
28 listCons :: !String !String !([a] -> b) -> DynamicCons | TC a & TC b
29 customEditorCons :: !String !String !(Editor a) -> DynamicCons | TC, JSONEncode{|*|}, JSONDecode{|*|}, gText{|*|} a
30 // dynamic variants are required because this is the only way to use a quantified type variable
31 functionConsDyn :: !String !String !Dynamic -> DynamicCons
32 listConsDyn :: !String !String !Dynamic -> DynamicCons
33
34 dynamicEditor :: !(DynamicEditor a) -> Editor (DynamicEditorValue a) | TC a
35
36 toValue :: !(DynamicEditor a) !(DynamicEditorValue a) -> a | TC a
37 dynEditorValToString :: !(DynamicEditor a) !(DynamicEditorValue a) -> String
38