As an F# developer with just enough category theory to follow along, I think this is really great.
I find the workaround for existential types in .NET particularly interesting, but it seems so verbose. Is there no way to do it with plain functions in order to avoid all the explicit type signatures?