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.