{-| Module : FiniteCategories Description : An example of composition graph. Copyright : Guillaume Sabbagh 2021 License : GPL-3 Maintainer : guillaumesabbagh@protonmail.com Stability : experimental Portability : portable An example of composition graph. -} module ExampleCompositionGraph.ExampleCompositionGraph ( square, main ) where import CompositionGraph.CompositionGraph import ExportGraphViz.ExportGraphViz (catToPdf) import qualified FiniteCategory.FiniteCategory as FinCat (FiniteCategoryError(..)) import Data.Text (Text, pack) f = (0, 1, pack "f") :: Arrow Int Text g = (1, 2, pack "g") :: Arrow Int Text h = (0, 3, pack "h") :: Arrow Int Text i = (3, 2, pack "i") :: Arrow Int Text -- | A composition law defined by hand. myLaw = [([g,f],[i,h])] myGraph = ([0, 1, 2, 3], [f,g,h,i]) -- | An example of a composition graph Right square = mkCompositionGraph myGraph myLaw my_sub_graph = ([0, 1, 3], [f,g,h,i]) -- | A composition subgraph of the previous composition graph. csg = mkCompositionGraph my_sub_graph myLaw -- | Exports the composition graphs as pdf files with GraphViz. main = main_ square csg where main_ _ (Left err) = putStrLn.show $ err main_ square (Right csg) = do putStrLn "Start of ExampleCompositionGraph" catToPdf square "OutputGraphViz/Examples/CompositionGraph/CompositionGraph/compositionGraph" catToPdf csg "OutputGraphViz/Examples/CompositionGraph/CompositionGraph/compositionGraph2" putStrLn "End of ExampleCompositionGraph"