How can an aging language become more relevant over the years, not less? C#’s answer is to be in more places, be more open, and evolve aggressively. Let’s look at where C# is today and where it’s headed. Yes, there will be code.
Given a sufficiently strong type system, you can model your problem domain in such a way that invalid states become unrepresentable. This is one of the corner stones of encapsulation, but requires a lot of effort in mainstream object-oriented languages. In functional languages like F# and Haskell, on the other hand, this is possible using a purely declarative approach to types. Once your types can guarantee that only valid states are representable, Property-Based Testing becomes a breeze.
In this talk, we'll look at using the powerful combination of F# types and properties to address an example problem.