cache-fn takes a function – which itself must return a channel – and returns a version of it that will cache results based on its arguments.

It does this by returning a sort of “promise” result so that all consumers can get the value out of the result chan, not just the first one.

promise-c returns a channel that always returns the result value.