I've been working with System F quite a bit lately, as it has a complicated enough typing system to be interesting, without having the full insanity of dependent types.  I've been working with System F including sums products and recursive types.  However, all of these can actually be encoded directly in System F.  At first I thought this was merely a curiosity.  It turns out however that for recursive types, the built in variety has some serious advantages.   System F  allows you to take types as arguments as well as terms.  From this system you can weave together an impressive array of very expressive types.  First I'll define a few of these, and then I'll further describe what I find really fascinating.   The basic idea is that we can apply a function such as (Λ X . λ f : X→X, x : X. f x) to some types and terms and we evaluate in a way analogous to the λ-Calculus:   (Λ X . λ f : X→X, x : X. f x) [T] g t ⇒ g t   Now lets look at how w...
This is Gavin Mendel-Gleason's technical blog.