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.