Various C# experimentations

## root

```
Short summaries:
CoRecursion:
Generalized corecursive static variables via simulating multiple static
constructors (ie. delayed initializers).
Fix:
Test using self-inheritance for fixed points of constructors, and how to
easily derive Nat and Tree using this method.
FreeMonads: (UNSAFE)
Early experiment using boxed free monads Contains a small example of how to
build sequential language representations. Containts Haskell code for
comparison.
Functors: (UNSAFE)
Early experiment demonstrating mu morphisms. Contains examples of mu-nats
and mu-lists as well as a factorial function using these. Contains Haskell
code for comparison.
InfEnumerable:
Demonstration using Free (,) “finalized lists” as well as how to use a
bottom type to statically ensure it to be infinite. Contains Haskell code for
comparison.
MonadDict:
Demonstration of reifying dictionaries to write polymorphic code. This
doubles as a safe and usable implementation of monads.
SumTypes:
Experiment of using inheritence for sum types, not too great since it doesn't
prohibit further descendants of the type, and doesn't allow impredicative
polymorphism (eg. Nothing :: forall a. Maybe a).
Prelude:
A tiny collection of useful types for future use: Monad/Functor dicts,
Sum/Product types as well as 1 and 0.
```