packages feed

FiniteCategories-0.1.0.0: test/ExampleSet/ExampleCompletion.hs

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

An example of set cat completion.
-}
module ExampleSet.ExampleCompletion
(
    main
)
where
    import              Set.FinSet
    import              ConeCategory.ConeCategory
    import              ExportGraphViz.ExportGraphViz
    import              Diagram.Diagram

    -- | Constructs the limit of an arbitrary diagram in a set category.
    main = do
        putStrLn "Start of ExampleCompletion"
        let set = Collection $ [singleton 1, singleton 2] :: FinSet Int
        let c = FinSetCat $ toList set
        
        let Just diag = mkDiscreteDiagram c [singleton 1, singleton 2]
        diagToPdf2 diag "OutputGraphViz/Examples/Set/diag"
        
        let coneCat = mkConeCategory diag
        catToPdf coneCat "OutputGraphViz/Examples/Set/Completion/coneCat"
        let (insertionFunctor, newDiag, newLimit) = constructLimit diag
        diagToPdf2 newDiag "OutputGraphViz/Examples/Set/Completion/newDiag"
        let newConeCat = mkConeCategory newDiag
        catToPdf newConeCat "OutputGraphViz/Examples/Set/Completion/newConeCat"
        let lim = limits newDiag
        sequence $ (uncurry coneToPdf) <$> zip (coneToNaturalTransformation <$> lim) (("OutputGraphViz/Examples/Set/Completion/limit"++).show <$> [1..(length lim)])
        putStrLn "End of ExampleCompletion"