{-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, TypeFamilies #-} module Data.HList.Graph ( HNodeSet , HNodeIDSet , HNode(..) , HGraph(..) , HNodeIDA ) where import Data.HList.Prelude -- HNodeSet class HNodeSet ns instance HNodeSet HNil instance HNodeSet ns => HNodeSet (HCons n ns) -- HNodeIDSet class HNoDuplicates nids => HNodeIDSet nids instance HNodeIDSet HNil instance (HOccursNot nid nids, HNodeIDSet nids) => HNodeIDSet (HCons nid nids) -- HNode class HNodeIDSet (HLinksFrom n) => HNode n where type HNodeID n type HLinksFrom n -- HNodeIDA data HNodeIDA instance ApplyT HNodeIDA n where type Apply HNodeIDA n = HNodeID n -- HGraph class ( HNodeSet (HNodes g) , HNoDuplicates (HMap HNodeIDA g) ) => HGraph g where type HNodes g --type family HGetNode g n