being helpful to see some symmetries that otherwise wouldn't be apparent.
btw on this, CT can definitely be useful to see how two things you already understand actually relate to each other / are two examples of the same thing, but it's rarely what you want to tackle something you don't understand yet (at least in programming, at least at the typical level of proficiency in CT)
(OptionT(a) orElse OptionT(b)).value
orElse, which is cooler. I mean, obviously.
def flatMap[A, B](fa: Graph[A])(f: A => Graph[B]): Graph[B]
Quiver is based on a comonad of graph decompositions and it solved my use case without any monadic craziness.
Lack of maintained graph libraries in the ecosystem suggests that either this usecase is super narrow, or people are using a Java library instead
flatMaps. not sure if there are compiler plugins that do otherwise
mapNwill evaluate effects in the order in which they appear in the tuple
Monads are usually written in terms of