packages feed

registry-0.3.2.1: 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.Registry
import Data.Registry.Statistics
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