Error handling as values?
Preserving structure
"Monads are just Monoids in the category of Endofunctors What's the problem?"
Tagless Final or Finally Tagless