]> gitweb @ CieloNegro.org - hs-rrdtool.git/blob - Data/HList/Graph.hs
f31659ca4671b660c95b88b3d4cfae3a21e73e18
[hs-rrdtool.git] / Data / HList / Graph.hs
1 {-# LANGUAGE
2   EmptyDataDecls,
3   FlexibleContexts,
4   FlexibleInstances,
5   MultiParamTypeClasses,
6   TypeFamilies
7   #-}
8 module Data.HList.Graph
9     ( HNodeSet
10     , HNodeIDSet
11     , HNode(..)
12     , HGraph(..)
13
14     , HNodeIDA
15     )
16     where
17
18 import Data.HList.Prelude
19
20 -- HNodeSet
21 class    HNodeSet ns
22 instance HNodeSet HNil
23 instance HNodeSet ns => HNodeSet (HCons n ns)
24
25 -- HNodeIDSet
26 class    HNoDuplicates nids => HNodeIDSet nids
27 instance HNodeIDSet HNil
28 instance (HOccursNot nid nids, HNodeIDSet nids) => HNodeIDSet (HCons nid nids)
29
30 -- HNode
31 class HNodeIDSet (HLinksFrom n) => HNode n
32     where
33       type HNodeID n
34       type HLinksFrom n
35
36 -- HNodeIDA
37 data HNodeIDA
38 instance ApplyT HNodeIDA n where
39     type Apply HNodeIDA n = HNodeID n
40
41 -- HGraph
42 class ( HNodeSet (HNodes g)
43       , HNoDuplicates (HMap HNodeIDA g)
44       )
45     => HGraph g
46     where
47       type HNodes g
48
49 --type family HGetNode g n