[Fencommits] fenserve: start working on rewrite of potions / db infrastructure

Benja Fallenstein benja.fallenstein at gmail.com
Mon Jun 4 23:12:20 EEST 2007


Mon Jun  4 23:11:48 EEST 2007  Benja Fallenstein <benja.fallenstein at gmail.com>
  * start working on rewrite of potions / db infrastructure
diff -rN -u old-fenserve/fendata/Types.hs new-fenserve/fendata/Types.hs
--- old-fenserve/fendata/Types.hs	1970-01-01 02:00:00.000000000 +0200
+++ new-fenserve/fendata/Types.hs	2007-06-04 23:12:20.000000000 +0300
@@ -0,0 +1,113 @@
+{-# OPTIONS_GHC -fglasgow-exts -fno-monomorphism-restriction #-}
+
+module Types where
+
+import HTML
+import Utils
+
+import Control.Monad.Reader (Reader)
+
+import Data.Generics (Typeable, Data)
+import Data.Map (Map)
+import qualified Data.Map as Map
+import Data.Set (Set)
+import qualified Data.Set as Set
+
+
+----------------------------------------------------------------------------
+-- Data
+----------------------------------------------------------------------------
+
+type CategoryId = Int
+type FieldId = Int
+type ItemId = Int
+
+data BaseType = InlineType | BlockType | BooleanType | NumberType
+              | EmailType | WebLinkType | DateType | ItemType CategoryId
+    deriving (Read, Show, Typeable, Data, Eq, Ord)
+              
+data Type = Single BaseType | Multiple BaseType
+    deriving (Read, Show, Typeable, Data, Eq, Ord)
+
+data Value = InlineValue String
+           | BlockValue String
+           | BooleanValue Bool
+           | NumberValue Float
+           | EmailValue String
+           | WebLinkValue String
+           | DateValue { dYear :: Int, dMonth :: Int, dDay :: Int }
+           | ItemValue CategoryId ItemId
+    deriving (Read, Show, Typeable, Data, Eq, Ord)
+           
+data Category = Category { catId :: CategoryId, catName :: String,
+                           catFields :: [Field] }
+    deriving (Read, Show, Typeable, Data, Eq, Ord)
+           
+data Field = Field { fieldId :: FieldId, fieldName :: String,
+                     fieldCat :: CategoryId, fieldType :: Type }
+    deriving (Read, Show, Typeable, Data, Eq, Ord)
+                     
+data Item = Item { itemId :: ItemId, itemCategories :: Set CategoryId,
+                   itemValues :: Map FieldId Value }
+    deriving (Read, Show, Typeable, Data, Eq, Ord)
+
+data DB = DB { dbCategories :: Map CategoryId Category,
+               dbItems :: Map ItemId Item, dbNextId :: Int }
+    deriving (Read, Show, Typeable, Data, Eq, Ord)
+               
+u_catName   f (Category a b c) = Category a (f b) c
+u_catFields f (Category a b c) = Category a b (f c)
+
+u_fieldName f (Field a b c d) = Field a (f b) c d
+u_fieldCat  f (Field a b c d) = Field a b (f c) d
+u_fieldType f (Field a b c d) = Field a b c (f d)
+
+u_itemCategories f (Item a b c) = Item a (f b) c
+u_itemValues     f (Item a b c) = Item a b (f c)
+
+u_dbCategories f (DB a b c) = DB (f a) b c
+u_dbItems      f (DB a b c) = DB a (f b) c
+
+u_item x f = u_dbItems $ Map.adjust f x
+u_cat  x f = u_dbCategories $ Map.adjust f x
+
+
+
+----------------------------------------------------------------------------
+-- Utilities
+----------------------------------------------------------------------------
+
+data Typeable a => Template a = TCons HTML a (Template a) | TNil HTML
+    deriving (Read, Show, Typeable, Data, Eq, Ord)
+
+
+
+----------------------------------------------------------------------------
+-- Potions
+----------------------------------------------------------------------------
+
+type FunId = String
+
+data Order = Ascending | Descending
+    deriving (Read, Show, Typeable, Data, Eq, Ord)
+
+data Fun = Fun (Template Type) Type Exp
+    deriving (Read, Show, Typeable, Data, Eq, Ord)
+    
+data Exp' e = Var Int
+            | Call FunId [e]
+            | Literal Value
+            | GetField CategoryId FieldId (e)
+            | AllItems CategoryId
+            | Sort e e Order
+            | Filter e e
+            | Add e e | Subtract e e | Mul e e | Div e e | Sum e | Product e
+            | Count e
+            | LT e e | LE e e | EQ e e | GE e e | GT e e
+            | IfThenElse e e e
+            | Today | AddMonths e e | AddDays e e
+    deriving (Read, Show, Typeable, Data, Eq, Ord)
+    
+data Exp = Exp (Exp' Exp) | Hole
+    deriving (Read, Show, Typeable, Data, Eq, Ord)
+




More information about the Fencommits mailing list