@@ -46,7 +46,41 @@ import qualified Data.Dependent.Map as DMap
4646import Data.Dependent.Sum (DSum (..))
4747import Data.GADT.Compare (GCompare (..), GEq (..), (:~:) (..), GOrdering (..))
4848import Data.Monoid
49−import Data.HList (HList (..), hBuild)
49+--import Data.HList (HList (..), hBuild)
50+
51+data HList (l::[*]) where
52+ HNil :: HList '[]
53+ HCons :: e -> HList l -> HList (e ': l)
54+
55+infixr 2 `HCons`
56+
57+type family HRevApp (l1 :: [k]) (l2 :: [k]) :: [k]
58+type instance HRevApp '[] l = l
59+type instance HRevApp (e ': l) l' = HRevApp l (e ': l')
60+
61+hRevApp :: HList l1 -> HList l2 -> HList (HRevApp l1 l2)
62+hRevApp HNil l = l
63+hRevApp (HCons x l) l' = hRevApp l (HCons x l')
64+
65+hReverse l = hRevApp l HNil
66+
67+hEnd :: HList l -> HList l
68+hEnd = id
69+
70+hBuild :: (HBuild' '[] r) => r
71+hBuild = hBuild' HNil
72+
73+class HBuild' l r where
74+ hBuild' :: HList l -> r
75+
76+instance (l' ~ HRevApp l '[])
77+ => HBuild' l (HList l') where
78+ hBuild' l = hReverse l
79+
80+instance HBuild' (a ': l) r
81+ => HBuild' l (a->r) where
82+ hBuild' l x = hBuild' (HCons x l)
83+
5084
5185data Dynamic t a
5286 = Dynamic (Behavior t a) (Event t a)