A Functor is an object with a map function which obeys a few rules




A Monad is a generic type which is wrapped up. It can be created from any non-null type. It can be composed. There is some way of applying a function which takes the underlying type to a Monad of that type.

  • Constructors being given an existing Monad should wrap the original value rather than the Monad
  • Applying a function to the Monad should do the work on the value directly and return a Monad of the result
  • Monads should be able to be composed

Some further reading:

Related Posts:


A Monoid is a Semigroup which also has a value which when concatenated to any value doesn’t change it. For example with a addition concatenating a 0 will not change the number you started with or with multiplication concatenating a 1 will not change the original number.



Reactive Programming

This idea brings together a few patterns including streams and data flows. They allow the system to react to changes within the data instantly, update the user interface to reflect them and do so in a performant and less complex way.

The code can therefor:

Base programming logic on what is known at the given moment. Have a clear sense of who can change what data Be told when data has changed and it is safe and performant to update

Some further reading:

Related Posts:



A semi group is something which can be concatenated together. It is associative which means that it doesn’t matter how you group the concatenation, it will always end up with the same result - like addition where 1 + 1 + 1 is the same as (1 + 1) + 1.




Work with me

Dave is a cohesive team member, widely popular with his colleagues and always inspiring quality, exploration and innovation. One of the true ‘greats’ we’ve had the pleasure to work with

I believe in community, in inspiration and creativity. I believe it's an inspired team and a laser focus on the user's experiece that will produce the best results. I want to help frontend teams live inspired, be productive and scale better.