{-| Module : FiniteCategories Description : An example of parallel diagram. Copyright : Guillaume Sabbagh 2021 License : GPL-3 Maintainer : guillaumesabbagh@protonmail.com Stability : experimental Portability : portable An example of parallel diagram. -} module ExampleDiagram.ExampleParallelDiagram ( parallelDiag, main ) where import RandomCompositionGraph.RandomCompositionGraph import System.Random import ExportGraphViz.ExportGraphViz (catToPdf,diagToPdf,diagToPdf2) import Diagram.Diagram (mkParallel, src) import Utils.Sample import FiniteCategory.FiniteCategory hiding (FiniteCategoryError(..)) import Data.Maybe (fromJust) (rcg1,newGen) = (mkRandomCompositionGraph 10 15 3 (mkStdGen 1234)) (arToPickFrom,newGen2) = (pickOne [ar rcg1 a b|a <- ob rcg1, b <- ob rcg1, length (ar rcg1 a b) > 1, a/=b] newGen) ([f,g],newGen3) = (sample arToPickFrom 2 newGen2) -- | We select a two parallel morphism in a random category. parallelDiag = fromJust $ (mkParallel rcg1 f g) -- | Export the diagram as a pdf with GraphViz. main = do putStrLn "Start of ExampleParallelDiagram" catToPdf rcg1 "OutputGraphViz/Examples/Diagram/ParallelDiagram/rcg1" catToPdf (src parallelDiag) "OutputGraphViz/Examples/Diagram/ParallelDiagram/Parallel" diagToPdf parallelDiag "OutputGraphViz/Examples/Diagram/ParallelDiagram/functor" diagToPdf2 parallelDiag "OutputGraphViz/Examples/Diagram/ParallelDiagram/diag" putStrLn "End of ExampleParallelDiagram"