registry-0.2.0.0: src/Data/Registry/Dot.hs
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE MonoLocalBinds #-}
{- |
This module provides functions to extract
a DOT graph (https://en.wikipedia.org/wiki/DOT_(graph_description_language)
out of a 'Registry'.
-}
module Data.Registry.Dot (
module D
, makeDot
, makeDotEither
) where
import Data.Registry.Internal.Dot as D
import Data.Registry.Statistics
import Data.Registry.Registry
import Protolude
-- | Make a DOT graph for a specific value `a` built from the 'Registry'
-- `a` is at the root of the graph and its children are values
-- needed to build `a`
makeDot :: forall a ins out . (Typeable a) => Registry ins out -> Dot
makeDot = toDot . operations . makeStatistics @a
-- | Similar to `make` but does not check if `a` can be made out of the 'Registry'
-- It returns a Left value if that's not the case
makeDotEither :: forall a ins out . (Typeable a) => Registry ins out -> Either Text Dot
makeDotEither r = toDot . operations <$> makeStatisticsEither @a r