Hi Co,

(This email in a gist in case the ASCII art below gets lost in translation https://gist.github.com/Lysxia/d81abf4e35e8094df0a92ec5ff1467da)

Categorically, we prefer looking at a monoid (Z, 1, (*)) as a pair of morphisms (functions in Set) (const 1 : () -> Z) and (uncurry (*) : Z x Z -> Z).
A monoid homomorphism is_odd : Z -> B is a morphism which makes the following diagrams commute:

           const 1
     () ------------> Z
     |                |
  id |                | is_odd
     |                |
     v                v
     () ------------> B
         const True

                         (*)
                Z x Z ---------> Z
                  |              |
is_odd *** is_odd |              | is_odd
                  |              |
                  v              v
                B x B ---------> B
                        (&&)

Cheers,
Li-yao


On 2022-09-22 10:03 AM, coplot coplot wrote:
Hello every one,
I'm reading
"Programming with Categories Brendan Fong Bartosz Milewski David I. Spivak"
and here there's an example of monoid in Haskell:

Consider the monoids Z× (Z, 1, ×) and BAND (B, true, AND). Let
is_odd : Z B be the function that sends odd numbers to true and even numbers to
false. This is a monoid homomorphism. It preserves identities because 1 is odd, and
it preserves composition because the product of any two odd numbers is odd, but the
product of anything with an even number is even.



I'd like representing it graphically I mean the object Zx and arrows about is_odd function,
but I do not know how can do it.

This is a valid example of monoid homomorphism and I'd like to know
the Haskell implementation and the corresponding categorically view.

Thanks
Co

_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.