Store validation state in types to avoid use of invalid data and unnecessary revalidation.
Xunit has Theories, which enable a single test to be run over a set of data. Wouldn't it be great of the data could be auto-generated?
Objects conflate construction, implementation hiding, (subtype) polymorphism, and the grouping of similar functionality. Algebraic Data Types (ADTs) help untangle these concepts.
Some features of C# make functional programming difficult. Let’s call them warts.
The benefits of parametricity and type classes.
Linq is monads in disguise.
Immutability makes equational reasoning possible. C# doesn’t make this easy because it has no simple mechanism for copy-on-write update of records.
Null shouldn’t exist. It does, but let’s not use it.