]> gitweb @ CieloNegro.org - hs-rrdtool.git/blobdiff - Data/HList/Graph.hs
type-level maps and maybes
[hs-rrdtool.git] / Data / HList / Graph.hs
index f31659ca4671b660c95b88b3d4cfae3a21e73e18..c3fcf87eb750f229c85951d185a25c4814ab2038 100644 (file)
@@ -1,49 +1,72 @@
 {-# LANGUAGE
   EmptyDataDecls,
-  FlexibleContexts,
-  FlexibleInstances,
-  MultiParamTypeClasses,
   TypeFamilies
   #-}
 module Data.HList.Graph
-    ( HNodeSet
-    , HNodeIDSet
-    , HNode(..)
-    , HGraph(..)
+    ( Context
+    , Graph
 
-    , HNodeIDA
+    , Empty
+    , IsEmpty
+--    , Match
     )
     where
 
 import Data.HList.Prelude
+import Types.Data.Bool
 
--- HNodeSet
-class    HNodeSet ns
-instance HNodeSet HNil
-instance HNodeSet ns => HNodeSet (HCons n ns)
+-- Graph is a map from node ID to context
+data Context preNodes node sucNodes
+data Graph nodeMap
 
--- HNodeIDSet
-class    HNoDuplicates nids => HNodeIDSet nids
-instance HNodeIDSet HNil
-instance (HOccursNot nid nids, HNodeIDSet nids) => HNodeIDSet (HCons nid nids)
+-- Empty
+type Empty = Graph Nil
 
--- HNode
-class HNodeIDSet (HLinksFrom n) => HNode n
+-- IsEmpty
+type family   IsEmpty g
+type instance IsEmpty (Graph Nil)         = True
+type instance IsEmpty (Graph (Cons x xs)) = False
+
+-- Match
+--type Match n g
+--    = 
+
+{-
+-- NodeSet
+class    NodeSet ns
+instance NodeSet Nil
+instance NodeSet ns => NodeSet (Cons n ns)
+
+-- NodeIDSet
+class    NoDuplicates ids => NodeIDSet ids
+instance NodeIDSet Nil
+instance (OccursNot id ids, NodeIDSet ids) => NodeIDSet (Cons id ids)
+
+-- LPath (list of labeled node IDs)
+class    LPath p
+instance LPath Nil
+instance LPath p => LPath (Cons (Cons l id) p)
+
+-- Node
+class NodeIDSet (LinksFrom n) => Node n
     where
-      type HNodeID n
-      type HLinksFrom n
+      type NodeID n
+      type LinksFrom n
 
--- HNodeIDA
-data HNodeIDA
-instance ApplyT HNodeIDA n where
-    type Apply HNodeIDA n = HNodeID n
+-- NodeIDA
+data NodeIDA
+instance ApplyT NodeIDA n where
+    type Apply NodeIDA n = NodeID n
 
--- HGraph
-class ( HNodeSet (HNodes g)
-      , HNoDuplicates (HMap HNodeIDA g)
+-- Graph
+class ( NodeSet (Nodes g)
+      , NoDuplicates (Map NodeIDA g)
       )
-    => HGraph g
+    => Graph g
     where
-      type HNodes g
+      type Empty g
+      type Nodes g
 
---type family HGetNode g n
\ No newline at end of file
+-- IsEmpty
+type family IsEmpty g
+-}
\ No newline at end of file