The "obvious" way to write a monadic zygomorphism is to look at the definition for an ordinary zygomorphism, namely

I read a recent Functional Pearl by Hinze and this inspired me to write up an example of projective programming and its motivation in logic/model theory.

This post was inspired by a curious
question on
Twitter: is `curry`

or `uncurry`

more common in Haskell code?

Though it does not often get mentioned in the Haskell community, simply
bumping to a new version of GHC can drastically improve the performance of your
code. Here, I have several examples from my
`fast-arithmetic`

package, which will hopefully give an idea of just how much work has gone into
optimizing code produced by GHC.

Below, I have collected several examples of "uncanny" Haskell. These are things
that may be surprising to those who have learned the language merely by *doing*.