FiniteCategories-0.1.0.0: test/ExampleDiagram/ExampleDiagram.hs
{-| Module : FiniteCategories
Description : An example of an arbitray diagram.
Copyright : Guillaume Sabbagh 2021
License : GPL-3
Maintainer : guillaumesabbagh@protonmail.com
Stability : experimental
Portability : portable
An example of an arbitray diagram. We select a square in a random composition graph.
-}
module ExampleDiagram.ExampleDiagram
(
diag,
main
)
where
import RandomCompositionGraph.RandomCompositionGraph
import System.Random
import ExportGraphViz.ExportGraphViz (catToPdf,diagToPdf,diagToPdf2)
import Diagram.Diagram (mkDiagram, src, completeMmap)
import CompositionGraph.CompositionGraph
import Utils.Sample
import FiniteCategory.FiniteCategory hiding (FiniteCategoryError(..))
import Data.Maybe (fromJust)
import Data.Map (Map, fromList)
import ExampleCompositionGraph.ExampleCompositionGraph (square)
import Utils.AssociationList
(rcg1,newGen) = (mkRandomCompositionGraph 20 25 3 (mkStdGen 12345))
-- | We select a square in the random category.
diag = fromJust $ mkDiagram square rcg1 (functToAssocList om (ob square)) fm
where
om 0 = 30
om 1 = 20
om 2 = 31
om 3 = 29
fm = completeMmap square rcg1 (functToAssocList om (ob square)) (functToAssocList fm_ (arrows square))
where
fm_ x
| x == (head (genAr square 0 1)) = head $ genAr rcg1 30 20
| x == (head (genAr square 1 2)) = head $ genAr rcg1 20 31
| x == (head (genAr square 0 3)) = head $ genAr rcg1 30 29
| x == (head (genAr square 3 2)) = head $ genAr rcg1 29 31
-- | Export the diagram as a pdf with GraphViz.
main = do
putStrLn "Start of ExampleDiagram"
catToPdf rcg1 "OutputGraphViz/Examples/Diagram/Diagram/rcg1"
catToPdf square "OutputGraphViz/Examples/Diagram/Diagram/square"
diagToPdf diag "OutputGraphViz/Examples/Diagram/Diagram/functor"
diagToPdf2 diag "OutputGraphViz/Examples/Diagram/Diagram/diag"
putStrLn "End of ExampleDiagram"