{-| 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"