cpkg-0.1.0.0: src/Package/C/Type/Tree.hs
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE TypeFamilies #-}
module Package.C.Type.Tree ( DepTree (..)
, DepTreeF (..)
, asBldDep
) where
import Control.Recursion
data DepTree p = DepNode p [DepTree p]
| BldDepNode p [DepTree p]
deriving (Functor, Foldable, Traversable)
data DepTreeF p x = DepNodeF { self :: p, deps :: [x] }
| BldDepNodeF { self :: p, deps :: [x] }
deriving (Functor, Foldable, Traversable)
type instance Base (DepTree a) = DepTreeF a
instance Recursive (DepTree a) where
project (DepNode p ps) = DepNodeF p ps
project (BldDepNode p ps) = BldDepNodeF p ps
asBldDep :: DepTree p -> DepTree p
asBldDep (DepNode p ps) = BldDepNode p (fmap asBldDep ps)
asBldDep (BldDepNode p ps) = BldDepNode p (fmap asBldDep ps)