Various C# experimentations


Short summaries:

  Generalized corecursive static variables via simulating multiple static
  constructors (ie. delayed initializers).

  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

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.

  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

  Demonstration of reifying dictionaries to write polymorphic code. This
  doubles as a safe and usable implementation of monads.

  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).

  A tiny collection of useful types for future use: Monad/Functor dicts,
  Sum/Product types as well as 1 and 0.