packages feed

FiniteCategories-0.1.0.0: test/ExampleCompositionGraph/ExampleSafeCompositionGraph.hs

{-| Module  : FiniteCategories
Description : An example of safe composition graph.
Copyright   : Guillaume Sabbagh 2021
License     : GPL-3
Maintainer  : guillaumesabbagh@protonmail.com
Stability   : experimental
Portability : portable

An example of safe composition graph.
-}
module ExampleCompositionGraph.ExampleSafeCompositionGraph
(
    squareS, main
)
where
    import              CompositionGraph.CompositionGraph
    import              CompositionGraph.SafeCompositionGraph
    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
    j = (3, 3, pack "j") :: Arrow Int Text
    
    -- | A composition law defined by hand. 
    myLaw = [([g,f],[i,h])]
            
    myGraph = ([0, 1, 2, 3], [f,g,h,i,j])
    -- | An example of a composition graph
    squareS = mkSafeCompositionGraph myGraph myLaw 3
    
    my_sub_graph = ([0, 1, 2], [f,j])
    -- | A composition subgraph of the previous composition graph.
    csg = mkSafeCompositionGraph my_sub_graph myLaw 2
            
    -- | Exports the composition graphs as pdf files with GraphViz.
    main = main_ squareS csg where
        main_ (Left err) _ = putStrLn.show $ err
        main_ _ (Left err) = putStrLn.show $ err
        main_ (Right squareS) (Right csg) = do
            putStrLn "Start of ExampleSafeCompositionGraph"
            catToPdf squareS "OutputGraphViz/Examples/CompositionGraph/SafeCompositionGraph/compositionGraph"
            catToPdf csg "OutputGraphViz/Examples/CompositionGraph/SafeCompositionGraph/compositionGraph2"
            putStrLn "End of ExampleSafeCompositionGraph"