Is F#'s type system sophisticated enough to express type classes, higher-kinded types, and/or existential types? Scala's implicits and related language features can go a long way down those roads, but I know very little about F# other than "it's like Scala but on the CLR" and am curious what the story is over there.