Top all-time · #3541
Eugene Yokota
Personal blog · eed3si9n.comprogramming
Eugene Yokota writes eed3si9n, a personal blog at eed3si9n.com about programming. Since 2012, 22 different Hacker News readers have linked it 35 times, most often “Scalaz cheat sheet”. It is still writing: the last post was on 2026-10-28, and you can follow it by feed.
Too few sampled comments (20) to say how often HN recommends it.?
Why HN links it
HN readers link Eugene Yokota's blog for Scala and functional programming guides, especially Learning Scalaz and Herding Cats. Commenters call these a well-written tutorial series and the best guide to Cats.
Summarised by Claude from a sample of 20 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
works by eugene yokota
Most-linked posts?
- /herding-cats/3 people · 4 mentions · first linked 2015-11-15
- Scalaz cheat sheet2 people · 2 mentions · first linked 2014-04-21
- Learning Scalaz2 people · 2 mentions · first linked 2015-02-12
What Hacker News says?
The thing with Scala is it depends on the pattern you want to use. I am a big advocate of it, and the function pattern being used fully with something like Cats or ZIO. However I would not suggest starting there. I would start by playing about with the syntax and writing standard OOP code, as its probably what you're most familiar with. When you want to dive into the power of FP then I recommend http://eed3si9n.com/…
Comment linking /herding-cats/
on “Scala 3.0”Submitted 2 Years at Twitter as a story · 107 points
HN discussionIf I understood John's motivation from the video, it's that this enables the Flatten structure to be inspectable, because the innards are not hidden behind an opaque closure (A => F[B]), as is the case in regular Monad. Btw, this is a problem that the "Selective applicative functor" too aims to alleviate. You can read more about the inspectability problem (and Selective) at http://eed3si9n.com/selective-functor-in-s…
Comment linking /selective-functor-in-sbt
on “Programming with Categories”Submitted Learning Scalaz as a story · 49 points
HN discussionIm a Scala fan, so all these will be focused around Scala, but they will teach you about Monad and Category Theory. I would start with http://learnyouahaskell.com - Its Haskell based but it covers them pretty well. Otherwise I use https://typelevel.org/cats/ for Scala daily and they have an _ok_ guide. But the best guide I've found for it was http://eed3si9n.com/herding-cats/
Comment linking /herding-cats/
on “Monads and GATs in Nightly Rust”Submitted Six years at Lightbend as a story · 8 points
HN discussionI think it would be great if we could replace implicits by: 1) a simple mechanism for "enrichment" (aka. retro-active extension, virtual classes) 2) functional type-level computation (as opposed to the mini-prolog engine that is implicit search + type inference). Reducing complexity is complicated, unfortunately. We [have been|are] thinking about both of these alternative features, though. --- ps: The following part…
Comment linking /implicit-parameter-precedence-again
on “True Scala complexity ”Submitted Herding Cats with Scala as a story · 2 points
HN discussionThere is an awesome book called "Functional Programming in Scala" that has a lot of great questions to work along to, and is great for somebody interested in both Haskell and Scala but doesn't assume prior experience with things like combinators and monads. If you are pretty far down the Haskell route and want to learn about one of the more advanced type-level libraries, You may want to jump into http://eed3si9n.com…
Comment linking /learning-scalaz/
on “Go kit: Go in the modern enterprise”Submitted Scopt 4: command line options parsing in scala as a story · 2 points
HN discussion> What if you want to write a library that works with either blocking calls or asynchronous promises? You don't need higher-kinded types for that. Just always return a promise, except the blocking version always return a promise that is already fulfilled. While strictly speaking this approach will work, a benefit of employing higher-kinded types (HTK's) to express a solution is being able to optimize without having…
Comment linking /learning-scalaz/Id.html
on “Higher-kinded types: the difference between giving up and moving forward”Submitted Tetrix in Scala as a story · 2 points
HN discussion> ... what about flatmapping and optional/maybe value? The same concepts apply. With an option type, flatMap can be defined in Scala Option[1] types as: flatMap[B](f: (A) ⇒ Option[B]): Option[B] For the empty option situation (None in Scala), the result is a None. For the populated case (Some in Scala), the result is what f produces when given the value contained in the original Option[A] type. Of course, f is free…
Comment linking /learning-scalaz/Monad+laws.html
on “Swift Functors, Applicatives, and Monads in Pictures”Submitted Sbt 2.0.0 as a story · 1 points
HN discussion> Its tied to collections, not specifically to List Actually, it transcends collections in general. As others have noted, the term "flatMap" is the concatenation of "flatten" and "map." There are other containers which support flatMap and satisfy the Monad laws[1]. An example of one in Scala is the Future[2] type. It's flatMap is described as: Creates a new future by applying a function to the successful result of t…
Comment linking /learning-scalaz/Monad+laws.html
on “Swift Functors, Applicatives, and Monads in Pictures”Submitted Shutting Down the Goldmine as a story · 1 points
HN discussionI get why you didn't go over Scalaz or any other of the awesome libraries out there. Which is why I didn't mention \/ and friends except as part of a tangential sub-thread :-). IMHO your scope is spot on for Vanilla Scala and will help many. Regarding the similar documents shout-out, here's one for Scalaz which I found very well written: http://eed3si9n.com/learning-scalaz/index.html Perhaps others know of write-ups…
Comment linking /learning-scalaz/index.html
on “Strategic Scala Style: Principle of Least Power”Submitted Sbt and the Miners of the Wild West as a story · 1 points
HN discussionThanks for the detailed response and concrete examples! Reading signatures is one thing (and zip is "easy"), but without examples it doesn't really help in most of the cases. Because even if I know the concept, I don't know when it comes handy. (For example I just looked at Forall ( https://static.javadoc.io/org.scalaz/scalaz_2.12/7.2.24/scal... ... Forall is an endofunctor in an endofunctor category ... ah yes!), a…
Comment linking /scalaz-cheat-sheet
on “The Last Hope for Scala's Infinity War [video]”Submitted Sbt 1.4.1 as a story · 1 points
HN discussionScala has overloading, currying not-by-default, optional and named parameters. Some similar stuff exist*, but they interfere with those Scala features, which I value more. * https://eed3si9n.com/learning-scalaz/Applicative.html I know the Haskell operators, but the Idris syntax are new to me. BTW * has to be escaped with a \.
Comment linking /learning-scalaz/Applicative.html
on “What Color Is Your Monad”Submitted Console games in Scala as a story · 1 points
HN discussionhttps://github.com/scalaz/scalaz Monad Transformers for one. Traverse/Sequence are another super common (amazing) pattern that requires abstracting over types. http://eed3si9n.com/learning-scalaz-day12 is a nice tutorial series on it.
Comment linking /learning-scalaz-day12
on “Scala's Option monad versus null-conditional operator in C#”Submitted Scalaz cheat sheet as a story · 1 points
HN discussionI'd suggest http://eed3si9n.com/herding-cats/ . Though a lot of the time I find it's best to wait until you have a concrete use case, otherwise the concept is too abstract to make sense.
Comment linking /herding-cats/
on “Algebraic Patterns – Monoid Morphism”Submitted Scala: Revisiting Implicits Without Import Tax as a story · 1 points
HN discussionIf we want to call any of the methods on the wrapped type we have to call directly to the wrapped type violating Demeter. You can also use tagged types: http://eed3si9n.com/learning-scalaz/Tagged+type.html But most of the methods will untag the type. I.e., ("foo" @@ ValidJsonString).substring(3,7) will be a String, not a String @@ ValidJsonString.
Comment linking /learning-scalaz/Tagged+type.html
on “Scala – 1 Star Would Not Program Again”> So you're not supposed to tell people where errors occur in Scala? You're supposed to use the types `Option` and `Either` or if you're into scalaz then \/ ( http://eed3si9n.com/learning-scalaz/Either.html ) and Validation ( http://eed3si9n.com/learning-scalaz/Validation.html ). Throwing exceptions is a childish way to handle errors in FP.
Comment linking /learning-scalaz/Validation.html
on “Friends don't let friends do Java”> Earnest question: Have you used a monoid? Yes. I have two explicit monoids in the production codebase I'm working on professionally right now. The simple case is one where I use foldMap to put together some values in a list. In isolation it's only saving a few lines compared to an explicit summing loop - but if you can "replace a few lines with a single method call" in a lot of places in your code, you end up with…
Comment linking /learning-scalaz/Writer.html
on “Understanding Monoids using F#”The cool kids are quickly abandoning scalaz for cats [1], in fact the exodus may already essentially be complete, as evidenced by the author's subsequent work [2]. I guess that's what happens when your project just attracts too many _ssholes. [1] https://github.com/non/cats [2] http://eed3si9n.com/herding-cats/
Comment linking /herding-cats/
on “Learning Scalaz”