I recently gave a workshop on functional programming and used a video from Rafal Dittwald as well
My principle was lead my coworkers from the know to the unknown and then show how a problem can be solved with the newly received knowledge.
I started with a comparison of imperative style vs functional style with list operations. Most (hopefully all) programmers should be familiar with the functions map, filter and reduce. I showed how you would map and filter in an imperative style: Everyone can see the verbosity and code duplication; Then I showed it using the map and filter function (concepts one can explain here: higher-order fns, fns as values, so-called lambdas). Then I explained reduce and that one can solve mostly any list-traversing task using reduce.
Then I talked about pure Functions, and had 8 functions prepared and asked for every fn what do you think: Is this a pure Function? That got us talking and thinking about side-effect, referential transparency and mutable state. Then I asked what benefits pure functions have over impure ones and described further benefits, which did not come up in the discussion.
This led to the next question: How to work conveniently with immutable datastructures?
I explained how to compose fns with pipe, compose or juxt. How to use currying and point free style (if the talk was more about clojure I would have talked about partial application and the threading macro) and showed how to use those fns for an elegant solution to a practical problem.
Then I talked about functional architecture and showed some picture from the talk I mentioned from Rafal Dittwald. My idea was to gave them first the tools to solve small problems with functional style and then to show how those practices add up to a clean functional architcture.