packages feed

FiniteCategories-0.1.0.0: test/ExampleCurrying/ExampleCurrying.hs

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

An example of currying a functor.
-}
module ExampleCurrying.ExampleCurrying
(
    main
)
where
    import              ExportGraphViz.ExportGraphViz          (catToPdf,genToPdf, diagToPdf2)
    import              FiniteCategory.FiniteCategory
    import              UsualCategories.Square
    import              YonedaEmbedding.YonedaEmbedding
    import              Diagram.Diagram
    import              Subcategories.Subcategory
    import              Currying.Currying
    
    -- | We select A and D in the Square category.
    Just diag = mkDiscreteDiagram Square [A,D]
    -- Just diag = mkSelect2 Square FH
    
    -- | We Yoneda embed the Square category.
    (yoneda,embedding) = yonedaEmbedding Square

    -- | We compose diag and embedding.
    curriedDiag = composeDiag embedding diag

    -- | Export all the previously defined categories as pdf with GraphViz.
    main = do 
        putStrLn "Start of ExampleCurrying"
        diagToPdf2 (fullDiagram curriedDiag) "OutputGraphViz/Examples/ExampleCurrying/yonedaEmbedding"
        diagToPdf2 (fullDiagram (uncurryDiagram curriedDiag)) "OutputGraphViz/Examples/ExampleCurrying/uncurriedYonedaEmbedding"
        diagToPdf2 (fullDiagram (curryDiagram (uncurryDiagram curriedDiag))) "OutputGraphViz/Examples/ExampleCurrying/curriedUncurriedYonedaEmbedding"
        diagToPdf2 (fullDiagram (switchArg curriedDiag)) "OutputGraphViz/Examples/ExampleCurrying/switchArgYoneda"
        putStrLn "End of ExampleCurrying"