I literally pulled my GoF book off the shelf when you said and went to page 243 and followed along. I knew I needed this pattern, just didn't realize it was in GoF. Thanks for the video!
thank you, Runar! This is a very HEALING idea that Monads was used by the GoF. Wonderfully fun for developers who have already learned the power of pure functional programming. But usually it is a subtle and sometimes religious argument. Here your audience gets the delightful irony of your discovery. (I laughed out loud) NOW create a presentation for the uninitiated that object-oriented and functional are just two edges of the same sword.
At 25:44 - It says " Suspend[ F[ _ ], A ]( s: F[ Exp[F, A] ] ) ". Shouldn't that be " Suspend[ F[ _ ], A ]( s: F[ Free[F, A] ] ) ". The "Exp" was from the previous example.
Also, 25:36 - is should be " Not[A](a: A) " instead of " Not(a: A) " - the latter does not compile. Also, way back at the beginning, the parameters for scalaz state machine (where you define "Exp.interpret") are backwards - it is (String => (String, Boolean)), not (String => (Boolean, String)).