-
Notifications
You must be signed in to change notification settings - Fork 0
/
Variant.purs
100 lines (92 loc) · 3.01 KB
/
Variant.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
module InteractiveData.Class.Defaults.Variant
( class DefaultVariant
, defaultVariant
, class DefaultVariantPartial
, defaultVariantPartial_
) where
import Chameleon (class Html)
import Data.Variant (Variant)
import DataMVC.Types (DataUI)
import DataMVC.Variant.DataUI (class DataUiVariant)
import InteractiveData.Class.InitDataUI (class GetInitSym, class InitRecord, initRecord)
import InteractiveData.Core (class IDHtml, IDSurface)
import InteractiveData.DataUIs as D
import InteractiveData.Core.Types.IDHtmlT (IDHtmlT)
import Prim.Row as Row
import Record as Record
import Type.Proxy (Proxy(..))
--------------------------------------------------------------------------------
--- DefaultVariant
--------------------------------------------------------------------------------
class
DefaultVariant
(token :: Type)
(html :: Type -> Type)
(fm :: Type -> Type)
(fs :: Type -> Type)
(rcase :: Row Type)
(rmsg :: Row Type)
(rsta :: Row Type)
(row :: Row Type)
where
defaultVariant
:: token -> DataUI (IDSurface (IDHtmlT html)) fm fs (D.VariantMsg rcase rmsg) (D.VariantState rsta) (Variant row)
instance
( Html html
, DataUiVariant datauis fm fs (IDSurface (IDHtmlT html)) initSym rcase rmsg rsta row
, InitRecord token row datauis
, GetInitSym row initSym
) =>
DefaultVariant token html fm fs rcase rmsg rsta row
where
defaultVariant
:: token -> DataUI (IDSurface (IDHtmlT html)) fm fs (D.VariantMsg rcase rmsg) (D.VariantState rsta) (Variant row)
defaultVariant token =
let
dataUis :: Record datauis
dataUis = initRecord @token @row token Proxy
in
D.variant_ dataUis
--------------------------------------------------------------------------------
--- DefaultVariantPartial
--------------------------------------------------------------------------------
class
DefaultVariantPartial
(token :: Type)
(datauisPart :: Row Type)
(html :: Type -> Type)
(fm :: Type -> Type)
(fs :: Type -> Type)
(initsym :: Symbol)
(rcase :: Row Type)
(rmsg :: Row Type)
(rsta :: Row Type)
(row :: Row Type)
where
defaultVariantPartial_
:: token
-> Proxy initsym
-> Record datauisPart
-> DataUI (IDSurface html) fm fs (D.VariantMsg rcase rmsg) (D.VariantState rsta) (Variant row)
instance
( Row.Union datauisGiven datauis datauisAll
, InitRecord token row datauis
, DataUiVariant datauis fm fs (IDSurface html) initsym rcase rmsg rsta row
, IDHtml html
, Row.Nub datauisAll datauis
) =>
DefaultVariantPartial token datauisGiven html fm fs initsym rcase rmsg rsta row
where
defaultVariantPartial_
:: token
-> Proxy initsym
-> Record datauisGiven
-> DataUI (IDSurface html) fm fs (D.VariantMsg rcase rmsg) (D.VariantState rsta) (Variant row)
defaultVariantPartial_ token _ datauisGiven =
let
dataUisInit :: Record datauis
dataUisInit = initRecord @token @row token Proxy
dataUis :: Record datauis
dataUis = Record.merge datauisGiven dataUisInit
in
D.variant_ dataUis