{-| Module  : FiniteCategories
Description : Examples of Kan extensions of set-valued functors pretty printed.
Copyright   : Guillaume Sabbagh 2023
License     : GPL-3
Maintainer  : guillaumesabbagh@protonmail.com
Stability   : experimental
Portability : portable

Examples of Kan extensions of set-valued functors pretty printed.


-}
module Math.Functors.SetValued.Example
(
    main
)
where
    import              Math.FiniteCategory
    import              Math.IO.PrettyPrint
    import              Math.FiniteCategories
    import              Math.Categories.FinSet
    import              Math.Functors.SetValued

    
    import              Data.WeakSet             (Set)
    import qualified    Data.WeakSet           as Set
    import              Data.WeakSet.Safe
    import              Data.WeakMap             (Map)
    import qualified    Data.WeakMap           as Map
    import              Data.WeakMap.Safe
    
    import              Data.Text                (pack)
    

    
    -- | Examples of Kan extensions of set-valued functors pretty printed.

    main :: IO ()
    main :: IO ()
main = do
        String -> IO ()
putStrLn String
"Start of Math.Functors.SetValued.Example"
        let Right SCG
c1 = String
-> Either (FiniteCategoryError (SCGMorphism Text Text) Text) SCG
readSCGString String
"2\nA -f-> B\nC -g-> B\n"
        String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ SCG -> String
forall c m o.
(FiniteCategory c m o, Morphism m o, PrettyPrint c, PrettyPrint m,
 PrettyPrint o, Eq m, Eq o) =>
c -> String
pprintFiniteCategory SCG
c1 
        let Right SCG
c2 = String
-> Either (FiniteCategoryError (SCGMorphism Text Text) Text) SCG
readSCGString String
"2\nA -f-> B\nC -g-> B\nB -h-> C\nA -i-> C\nC -g-> B -h-> C = <ID>\nB -h-> C -g-> B = <ID>\nA -i-> C -g-> B = A -f-> B\nA -f-> B -h-> C = A -i-> C\n"
        String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ SCG -> String
forall c m o.
(FiniteCategory c m o, Morphism m o, PrettyPrint c, PrettyPrint m,
 PrettyPrint o, Eq m, Eq o) =>
c -> String
pprintFiniteCategory SCG
c2 
        let Right SCGD
f = String
-> Either
     (DiagramError
        SCG (SCGMorphism Text Text) Text SCG (SCGMorphism Text Text) Text)
     SCGD
readSCGDString String
"<SRC>\n2\nA -f-> B\nC -g-> B\n</SRC>\n<TGT>\n2\nA -f-> B\nC -g-> B\nB -h-> C\nA -i-> C\nC -g-> B -h-> C = <ID>\nB -h-> C -g-> B = <ID>\nA -i-> C -g-> B = A -f-> B\nA -f-> B -h-> C = A -i-> C\n</TGT>\nA -f-> B => A -f-> B\nC -g-> B => C -g-> B\n"
        String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ SCGD -> String
forall a. PrettyPrint a => a -> String
pprint SCGD
f 
        let x :: Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet Int)
  (Function Int)
  (Set Int)
x = Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet Int)
  (Function Int)
  (Set Int)
-> Diagram
     SCG
     (SCGMorphism Text Text)
     Text
     (FinSet Int)
     (Function Int)
     (Set Int)
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2) =>
Diagram c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
completeDiagram Diagram{src :: SCG
src=SCG
c1,tgt :: FinSet Int
tgt=FinSet Int
forall a. FinSet a
FinSet,omap :: Map Text (Set Int)
omap=AssociationList Text (Set Int) -> Map Text (Set Int)
forall k v. AssociationList k v -> Map k v
weakMap [(String -> Text
pack String
"A",[Int] -> Set Int
forall a. [a] -> Set a
set [Int
1 :: Int]),(String -> Text
pack String
"B",[Int] -> Set Int
forall a. [a] -> Set a
set [Int
2,Int
3]),(String -> Text
pack String
"C",[Int] -> Set Int
forall a. [a] -> Set a
set [Int
4,Int
5])], mmap :: Map (SCGMorphism Text Text) (Function Int)
mmap= AssociationList (SCGMorphism Text Text) (Function Int)
-> Map (SCGMorphism Text Text) (Function Int)
forall k v. AssociationList k v -> Map k v
weakMap [(Set (SCGMorphism Text Text) -> SCGMorphism Text Text
forall a. Set a -> a
anElement (SCG -> Text -> Text -> Set (SCGMorphism Text Text)
forall c m o.
(Category c m o, Morphism m o) =>
c -> o -> o -> Set m
genAr SCG
c1 (String -> Text
pack String
"A") (String -> Text
pack String
"B")),Function{function :: Map Int Int
function=AssociationList Int Int -> Map Int Int
forall k v. AssociationList k v -> Map k v
weakMap [(Int
1,Int
2)], codomain :: Set Int
codomain = [Int] -> Set Int
forall a. [a] -> Set a
set [Int
2,Int
3]}),(Set (SCGMorphism Text Text) -> SCGMorphism Text Text
forall a. Set a -> a
anElement (SCG -> Text -> Text -> Set (SCGMorphism Text Text)
forall c m o.
(Category c m o, Morphism m o) =>
c -> o -> o -> Set m
genAr SCG
c1 (String -> Text
pack String
"C") (String -> Text
pack String
"B")),Function{function :: Map Int Int
function=AssociationList Int Int -> Map Int Int
forall k v. AssociationList k v -> Map k v
weakMap [(Int
4,Int
2),(Int
5,Int
3)], codomain :: Set Int
codomain = [Int] -> Set Int
forall a. [a] -> Set a
set [Int
2,Int
3]})]}
        String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (InheritedSubcategory (FinSet Int) (Function Int) (Set Int))
  (Function Int)
  (Set Int)
-> String
forall a. PrettyPrint a => a -> String
pprint (Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet Int)
  (Function Int)
  (Set Int)
-> Diagram
     SCG
     (SCGMorphism Text Text)
     Text
     (InheritedSubcategory (FinSet Int) (Function Int) (Set Int))
     (Function Int)
     (Set Int)
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq m1, Eq o1) =>
Diagram c1 m1 o1 c2 m2 o2
-> Diagram c1 m1 o1 (InheritedSubcategory c2 m2 o2) m2 o2
fullDiagram2 Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet Int)
  (Function Int)
  (Set Int)
x) 
        let (Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
  (Function (LimitObject Text (SCGMorphism Text Text) Int))
  (Set (LimitObject Text (SCGMorphism Text Text) Int))
ran, NaturalTransformation
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
  (Function (LimitObject Text (SCGMorphism Text Text) Int))
  (Set (LimitObject Text (SCGMorphism Text Text) Int))
epsilon) = SCGD
-> Diagram
     SCG
     (SCGMorphism Text Text)
     Text
     (FinSet Int)
     (Function Int)
     (Set Int)
-> (Diagram
      SCG
      (SCGMorphism Text Text)
      Text
      (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
      (Function (LimitObject Text (SCGMorphism Text Text) Int))
      (Set (LimitObject Text (SCGMorphism Text Text) Int)),
    NaturalTransformation
      SCG
      (SCGMorphism Text Text)
      Text
      (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
      (Function (LimitObject Text (SCGMorphism Text Text) Int))
      (Set (LimitObject Text (SCGMorphism Text Text) Int)))
forall c1 m1 o1 c2 m2 o2 a.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq m2, Eq o2, Eq a) =>
Diagram c1 m1 o1 c2 m2 o2
-> Diagram c1 m1 o1 (FinSet a) (Function a) (Set a)
-> (Diagram
      c2
      m2
      o2
      (FinSet (LimitObject o1 m2 a))
      (Function (LimitObject o1 m2 a))
      (Set (LimitObject o1 m2 a)),
    NaturalTransformation
      c1
      m1
      o1
      (FinSet (LimitObject o1 m2 a))
      (Function (LimitObject o1 m2 a))
      (Set (LimitObject o1 m2 a)))
rightKanSetValued SCGD
f Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet Int)
  (Function Int)
  (Set Int)
x
        String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (InheritedSubcategory
     (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
     (Function (LimitObject Text (SCGMorphism Text Text) Int))
     (Set (LimitObject Text (SCGMorphism Text Text) Int)))
  (Function (LimitObject Text (SCGMorphism Text Text) Int))
  (Set (LimitObject Text (SCGMorphism Text Text) Int))
-> String
forall a. PrettyPrint a => a -> String
pprint (Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
  (Function (LimitObject Text (SCGMorphism Text Text) Int))
  (Set (LimitObject Text (SCGMorphism Text Text) Int))
-> Diagram
     SCG
     (SCGMorphism Text Text)
     Text
     (InheritedSubcategory
        (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
        (Function (LimitObject Text (SCGMorphism Text Text) Int))
        (Set (LimitObject Text (SCGMorphism Text Text) Int)))
     (Function (LimitObject Text (SCGMorphism Text Text) Int))
     (Set (LimitObject Text (SCGMorphism Text Text) Int))
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq m1, Eq o1) =>
Diagram c1 m1 o1 c2 m2 o2
-> Diagram c1 m1 o1 (InheritedSubcategory c2 m2 o2) m2 o2
fullDiagram2 Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
  (Function (LimitObject Text (SCGMorphism Text Text) Int))
  (Set (LimitObject Text (SCGMorphism Text Text) Int))
ran) 
        String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (InheritedSubcategory
     (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
     (Function (LimitObject Text (SCGMorphism Text Text) Int))
     (Set (LimitObject Text (SCGMorphism Text Text) Int)))
  (Function (LimitObject Text (SCGMorphism Text Text) Int))
  (Set (LimitObject Text (SCGMorphism Text Text) Int))
-> String
forall a. PrettyPrint a => a -> String
pprint (Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
  (Function (LimitObject Text (SCGMorphism Text Text) Int))
  (Set (LimitObject Text (SCGMorphism Text Text) Int))
-> Diagram
     SCG
     (SCGMorphism Text Text)
     Text
     (InheritedSubcategory
        (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
        (Function (LimitObject Text (SCGMorphism Text Text) Int))
        (Set (LimitObject Text (SCGMorphism Text Text) Int)))
     (Function (LimitObject Text (SCGMorphism Text Text) Int))
     (Set (LimitObject Text (SCGMorphism Text Text) Int))
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq m1, Eq o1) =>
Diagram c1 m1 o1 c2 m2 o2
-> Diagram c1 m1 o1 (InheritedSubcategory c2 m2 o2) m2 o2
fullDiagram2 Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
  (Function (LimitObject Text (SCGMorphism Text Text) Int))
  (Set (LimitObject Text (SCGMorphism Text Text) Int))
ran)
        String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ NaturalTransformation
  SCG
  (SCGMorphism Text Text)
  Text
  (InheritedSubcategory
     (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
     (Function (LimitObject Text (SCGMorphism Text Text) Int))
     (Set (LimitObject Text (SCGMorphism Text Text) Int)))
  (Function (LimitObject Text (SCGMorphism Text Text) Int))
  (Set (LimitObject Text (SCGMorphism Text Text) Int))
-> String
forall a. PrettyPrint a => a -> String
pprint (NaturalTransformation
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
  (Function (LimitObject Text (SCGMorphism Text Text) Int))
  (Set (LimitObject Text (SCGMorphism Text Text) Int))
-> NaturalTransformation
     SCG
     (SCGMorphism Text Text)
     Text
     (InheritedSubcategory
        (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
        (Function (LimitObject Text (SCGMorphism Text Text) Int))
        (Set (LimitObject Text (SCGMorphism Text Text) Int)))
     (Function (LimitObject Text (SCGMorphism Text Text) Int))
     (Set (LimitObject Text (SCGMorphism Text Text) Int))
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
NaturalTransformation c1 m1 o1 c2 m2 o2
-> NaturalTransformation
     c1 m1 o1 (InheritedSubcategory c2 m2 o2) m2 o2
fullNaturalTransformation2 NaturalTransformation
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (LimitObject Text (SCGMorphism Text Text) Int))
  (Function (LimitObject Text (SCGMorphism Text Text) Int))
  (Set (LimitObject Text (SCGMorphism Text Text) Int))
epsilon)
        let (Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
  (Function (ColimitObject Text (SCGMorphism Text Text) Int))
  (Set (ColimitObject Text (SCGMorphism Text Text) Int))
lan, NaturalTransformation
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
  (Function (ColimitObject Text (SCGMorphism Text Text) Int))
  (Set (ColimitObject Text (SCGMorphism Text Text) Int))
eta) = SCGD
-> Diagram
     SCG
     (SCGMorphism Text Text)
     Text
     (FinSet Int)
     (Function Int)
     (Set Int)
-> (Diagram
      SCG
      (SCGMorphism Text Text)
      Text
      (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
      (Function (ColimitObject Text (SCGMorphism Text Text) Int))
      (Set (ColimitObject Text (SCGMorphism Text Text) Int)),
    NaturalTransformation
      SCG
      (SCGMorphism Text Text)
      Text
      (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
      (Function (ColimitObject Text (SCGMorphism Text Text) Int))
      (Set (ColimitObject Text (SCGMorphism Text Text) Int)))
forall c1 m1 o1 c2 m2 o2 a.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq m2, Eq o2, Eq a) =>
Diagram c1 m1 o1 c2 m2 o2
-> Diagram c1 m1 o1 (FinSet a) (Function a) (Set a)
-> (Diagram
      c2
      m2
      o2
      (FinSet (ColimitObject o1 m2 a))
      (Function (ColimitObject o1 m2 a))
      (Set (ColimitObject o1 m2 a)),
    NaturalTransformation
      c1
      m1
      o1
      (FinSet (ColimitObject o1 m2 a))
      (Function (ColimitObject o1 m2 a))
      (Set (ColimitObject o1 m2 a)))
leftKanSetValued SCGD
f Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet Int)
  (Function Int)
  (Set Int)
x
        String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (InheritedSubcategory
     (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
     (Function (ColimitObject Text (SCGMorphism Text Text) Int))
     (Set (ColimitObject Text (SCGMorphism Text Text) Int)))
  (Function (ColimitObject Text (SCGMorphism Text Text) Int))
  (Set (ColimitObject Text (SCGMorphism Text Text) Int))
-> String
forall a. PrettyPrint a => a -> String
pprint (Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
  (Function (ColimitObject Text (SCGMorphism Text Text) Int))
  (Set (ColimitObject Text (SCGMorphism Text Text) Int))
-> Diagram
     SCG
     (SCGMorphism Text Text)
     Text
     (InheritedSubcategory
        (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
        (Function (ColimitObject Text (SCGMorphism Text Text) Int))
        (Set (ColimitObject Text (SCGMorphism Text Text) Int)))
     (Function (ColimitObject Text (SCGMorphism Text Text) Int))
     (Set (ColimitObject Text (SCGMorphism Text Text) Int))
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq m1, Eq o1) =>
Diagram c1 m1 o1 c2 m2 o2
-> Diagram c1 m1 o1 (InheritedSubcategory c2 m2 o2) m2 o2
fullDiagram2 Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
  (Function (ColimitObject Text (SCGMorphism Text Text) Int))
  (Set (ColimitObject Text (SCGMorphism Text Text) Int))
lan) 
        String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (InheritedSubcategory
     (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
     (Function (ColimitObject Text (SCGMorphism Text Text) Int))
     (Set (ColimitObject Text (SCGMorphism Text Text) Int)))
  (Function (ColimitObject Text (SCGMorphism Text Text) Int))
  (Set (ColimitObject Text (SCGMorphism Text Text) Int))
-> String
forall a. PrettyPrint a => a -> String
pprint (Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
  (Function (ColimitObject Text (SCGMorphism Text Text) Int))
  (Set (ColimitObject Text (SCGMorphism Text Text) Int))
-> Diagram
     SCG
     (SCGMorphism Text Text)
     Text
     (InheritedSubcategory
        (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
        (Function (ColimitObject Text (SCGMorphism Text Text) Int))
        (Set (ColimitObject Text (SCGMorphism Text Text) Int)))
     (Function (ColimitObject Text (SCGMorphism Text Text) Int))
     (Set (ColimitObject Text (SCGMorphism Text Text) Int))
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq m1, Eq o1) =>
Diagram c1 m1 o1 c2 m2 o2
-> Diagram c1 m1 o1 (InheritedSubcategory c2 m2 o2) m2 o2
fullDiagram2 Diagram
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
  (Function (ColimitObject Text (SCGMorphism Text Text) Int))
  (Set (ColimitObject Text (SCGMorphism Text Text) Int))
lan)
        String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ NaturalTransformation
  SCG
  (SCGMorphism Text Text)
  Text
  (InheritedSubcategory
     (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
     (Function (ColimitObject Text (SCGMorphism Text Text) Int))
     (Set (ColimitObject Text (SCGMorphism Text Text) Int)))
  (Function (ColimitObject Text (SCGMorphism Text Text) Int))
  (Set (ColimitObject Text (SCGMorphism Text Text) Int))
-> String
forall a. PrettyPrint a => a -> String
pprint (NaturalTransformation
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
  (Function (ColimitObject Text (SCGMorphism Text Text) Int))
  (Set (ColimitObject Text (SCGMorphism Text Text) Int))
-> NaturalTransformation
     SCG
     (SCGMorphism Text Text)
     Text
     (InheritedSubcategory
        (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
        (Function (ColimitObject Text (SCGMorphism Text Text) Int))
        (Set (ColimitObject Text (SCGMorphism Text Text) Int)))
     (Function (ColimitObject Text (SCGMorphism Text Text) Int))
     (Set (ColimitObject Text (SCGMorphism Text Text) Int))
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
NaturalTransformation c1 m1 o1 c2 m2 o2
-> NaturalTransformation
     c1 m1 o1 (InheritedSubcategory c2 m2 o2) m2 o2
fullNaturalTransformation2 NaturalTransformation
  SCG
  (SCGMorphism Text Text)
  Text
  (FinSet (ColimitObject Text (SCGMorphism Text Text) Int))
  (Function (ColimitObject Text (SCGMorphism Text Text) Int))
  (Set (ColimitObject Text (SCGMorphism Text Text) Int))
eta) 
        String -> IO ()
putStrLn String
"End of Math.Functors.SetValued.Example"