on develop help sign in
Remove dependency on HList
commit495e7f8d8e0c121443faec9adc102d3d84a231f7 authorRyan Trinkle <ryan.trinkle@gmail.com> dateSun 15 Feb 2015, 16:06 (12 years ago) parentc4cacc2
2 files changed+35−2
reflex.cabal−1 src/Reflex/Dynamic.hs+35−1
reflex.cabal−1
@@ -23,7 +23,6 @@ library
2323 these,
2424 lens,
2525 primitive,
26− HList,
2726 template-haskell
2827
2928 exposed-modules:
src/Reflex/Dynamic.hs+35−1
@@ -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)