The book above uses Scala so you should prefer that. It’s in Scala 2, so enums are a bit awkward, so it has to do sealed trait + case class pattern manually. It goes very heavily into the category theory stuff with Scalaz. Be prepared for a lot of algebraic laws and stuff!

It’s in F# but can work easily with Scala. It only touches on monads briefly, does not have any category stuff / algebraic laws other than that. At least worth a look. It uses Haskell-ish enum / algebraic data types, so you might want to prefer Scala 3 for it.