[Fencommits] fenserve: more generic tooling for processing tuples as heterogeneous lists

Benja Fallenstein benja.fallenstein at gmail.com
Mon Jun 4 12:04:36 EEST 2007


Mon Jun  4 04:30:48 EEST 2007  Benja Fallenstein <benja.fallenstein at gmail.com>
  * more generic tooling for processing tuples as heterogeneous lists
diff -rN -u old-fenserve/fendata/HListUtils.hs new-fenserve/fendata/HListUtils.hs
--- old-fenserve/fendata/HListUtils.hs	1970-01-01 02:00:00.000000000 +0200
+++ new-fenserve/fendata/HListUtils.hs	2007-06-04 12:04:36.000000000 +0300
@@ -0,0 +1,33 @@
+{-# OPTIONS_GHC -fglasgow-exts #-}
+
+module HListUtils where
+
+infixr 5 :*:
+
+data a :*: b = a :*: b
+data Nil = Nil
+
+class ToHList a l | a -> l where toHList :: a -> l
+
+instance ToHList () Nil where
+    toHList () = Nil
+    
+instance ToHList (a,b) (a:*:b:*:Nil) where
+    toHList (a,b) = a :*: b :*: Nil
+instance ToHList (a,b,c) (a:*:b:*:c:*:Nil) where
+    toHList (a,b,c) = a :*: b :*: c :*: Nil
+instance ToHList (a,b,c,d) (a:*:b:*:c:*:d:*:Nil) where
+    toHList (a,b,c,d) = a :*: b :*: c :*: d :*: Nil
+instance ToHList (a,b,c,d,e) (a:*:b:*:c:*:d:*:e:*:Nil) where
+    toHList (a,b,c,d,e) = a :*: b :*: c :*: d :*: e :*: Nil
+instance ToHList (a,b,c,d,e,f) (a:*:b:*:c:*:d:*:e:*:f:*:Nil) where
+    toHList (a,b,c,d,e,f) = a :*: b :*: c :*: d :*: e :*: f :*: Nil
+instance ToHList (a,b,c,d,e,f,g) (a:*:b:*:c:*:d:*:e:*:f:*:g:*:Nil) where
+    toHList (a,b,c,d,e,f,g) = a :*: b :*: c :*: d :*: e :*: f :*: g :*: Nil
+instance ToHList (a,b,c,d,e,f,g,h) (a:*:b:*:c:*:d:*:e:*:f:*:g:*:h:*:Nil) where
+    toHList (a,b,c,d,e,f,g,h) = a:*:b:*:c:*:d:*:e:*:f:*:g:*:h:*:Nil
+instance ToHList (a,b,c,d,e,f,g,h,i) (a:*:b:*:c:*:d:*:e:*:f:*:g:*:h:*:i:*:Nil) where
+    toHList (a,b,c,d,e,f,g,h,i) = a:*:b:*:c:*:d:*:e:*:f:*:g:*:h:*:i:*:Nil
+instance ToHList (a,b,c,d,e,f,g,h,i,j) (a:*:b:*:c:*:d:*:e:*:f:*:g:*:h:*:i:*:j:*:Nil) where
+    toHList (a,b,c,d,e,f,g,h,i,j) = a:*:b:*:c:*:d:*:e:*:f:*:g:*:h:*:i:*:j:*:Nil
+
diff -rN -u old-fenserve/fendata/HTML.hs new-fenserve/fendata/HTML.hs
--- old-fenserve/fendata/HTML.hs	2007-06-04 12:04:36.000000000 +0300
+++ new-fenserve/fendata/HTML.hs	2007-06-04 12:04:36.000000000 +0300
@@ -2,6 +2,8 @@
 
 module HTML where
 
+import HListUtils
+
 import HAppS (lookM)
 
 import Data.Generics (Typeable, Data)
@@ -45,22 +47,13 @@
 instance ToHTML String where
     toHTML = HTML . concatMap quoteChar
     
-instance (ToHTML a, ToHTML b) => ToHTML (a,b) where
-    toHTML (a,b) = a & b
-instance (ToHTML a, ToHTML (b,c)) => ToHTML (a,b,c) where
-    toHTML (a,b,c) = a & (b,c)
-instance (ToHTML a, ToHTML (b,c,d)) => ToHTML (a,b,c,d) where
-    toHTML (a,b,c,d) = a & (b,c,d)
-instance (ToHTML a, ToHTML (b,c,d,e)) => ToHTML (a,b,c,d,e) where
-    toHTML (a,b,c,d,e) = a & (b,c,d,e)
-instance (ToHTML a, ToHTML (b,c,d,e,f)) => ToHTML (a,b,c,d,e,f) where
-    toHTML (a,b,c,d,e,f) = a & (b,c,d,e,f)
-instance (ToHTML a, ToHTML (b,c,d,e,f,g)) => ToHTML (a,b,c,d,e,f,g) where
-    toHTML (a,b,c,d,e,f,g) = a & (b,c,d,e,f,g)
-instance (ToHTML a, ToHTML (b,c,d,e,f,g,h)) => ToHTML (a,b,c,d,e,f,g,h) where
-    toHTML (a,b,c,d,e,f,g,h) = a & (b,c,d,e,f,g,h)
-instance (ToHTML a, ToHTML (b,c,d,e,f,g,h,i)) => ToHTML (a,b,c,d,e,f,g,h,i) where
-    toHTML (a,b,c,d,e,f,g,h,i) = a & (b,c,d,e,f,g,h,i)
+class HCat a where hCat :: a -> HTML
+instance HCat Nil where hCat Nil = HTML ""
+instance (ToHTML x, HCat xs) => HCat (x :*: xs) where 
+    hCat (x :*: xs) = x & hCat xs
+    
+instance (ToHList a l, HCat l) => ToHTML a where
+    toHTML a = hCat (toHList a)
 
 instance ToString String where toString = id
 instance Show a => ToString a where toString = show




More information about the Fencommits mailing list