Improved the efficiency by using memoisation and changing the use of Count*() to HasHead().  In hindsight IsEmpty() would have been nicer.
Merge branch 'master' of https://github.com/louthy/csharp-monad.git