]> gitweb @ CieloNegro.org - hs-rrdtool.git/commitdiff
DSList
authorPHO <pho@cielonegro.org>
Sat, 24 Apr 2010 05:47:23 +0000 (14:47 +0900)
committerPHO <pho@cielonegro.org>
Sat, 24 Apr 2010 05:47:23 +0000 (14:47 +0900)
Data/HList/Graph.hs [new file with mode: 0644]
Database/RRDtool/Create.hs

diff --git a/Data/HList/Graph.hs b/Data/HList/Graph.hs
new file mode 100644 (file)
index 0000000..ee5f613
--- /dev/null
@@ -0,0 +1,33 @@
+{-# LANGUAGE
+  FlexibleContexts,
+  FlexibleInstances,
+  TypeFamilies
+  #-}
+module Data.HList.Graph
+    ( HNodeSet
+    , HNode(..)
+    , HGraph(..)
+    )
+    where
+
+import Data.HList.Prelude
+
+-- HNodeSet
+class    HNodeSet ns
+instance HNodeSet HNil
+instance HNodeSet ns => HNodeSet (HCons n ns)
+
+-- HNode
+class ( HNodeSet (HLinksFrom n)
+      )
+    => HNode n
+    where
+      type HNodeID n
+      type HLinksFrom n
+
+-- HGraph
+class ( HNodeSet (HNodes g)
+      )
+    => HGraph g
+    where
+      type HNodes g
index 5dd3b9f8fc12aadee9c64bef068dd335ee99b289..2adeb2475a7abe86f3766eb4fff4cf5d58ed0d34 100644 (file)
@@ -1,9 +1,12 @@
 {-# LANGUAGE
   FlexibleContexts,
   FlexibleInstances,
+  GADTs,
+  OverlappingInstances,
   TypeFamilies,
   UndecidableInstances
   #-}
+{-# LANGUAGE QuasiQuotes #-} -- DELETE THIS
 module Database.RRDtool.Create
     ( DataSource
     , ExternalDSType(..)
@@ -192,22 +195,45 @@ newtype RRDStartTime = RRDStartTime POSIXTime
 newtype RRDInterval = RRDInterval NominalDiffTime
 
 class RRDSpec s
-instance ( HOccurs    RRDPath      s
-         , HOccursOpt KeepOldRRD   s
-         , HOccursOpt RRDStartTime s
-         , HOccursOpt RRDInterval  s
+instance ( HOccurs    RRDPath       s
+         , HOccursOpt KeepOldRRD    s
+         , HOccursOpt RRDStartTime  s
+         , HOccursOpt RRDInterval   s
          )
     => RRDSpec s
 
+class NonEmptyDSList l
+instance ( DSList l
+         , DataSource ds
+         )
+    => NonEmptyDSList (HCons ds l)
+
+class DSList l
+instance DSList HNil
+instance ( DSList l
+         , DataSource ds
+         )
+    => DSList (HCons ds l)
+
+-- DataList would be a graph...
+
 -- |The 'createRRD' function lets you set up new Round Robin Database
 -- (RRD) files. The file is created at its final, full size and filled
 -- with @*UNKNOWN*@ data.
-createRRD :: RRDSpec s => s -> IO ()
+createRRD :: ( RRDSpec s
+             , NonEmptyDSList l
+             )
+            => s -> l -> IO ()
 createRRD = error "FIXME"
 
 testMain :: IO ()
 testMain = let s = RRDPath "test.rrd" .&.
                    KeepOldRRD         .&.
                    HNil
+               x = ComputedDataSource {
+                     cdsName = [$hString|foo|]
+                   , cdsExpr = Const 100
+                   }
+               d = x .&. HNil
            in
-             createRRD s
+             createRRD s d