C# has &quot;computation expressions&quot;, except they are hard-coded into the compiler. It has duck typing, but it&#x27;s hard-coded into the compiler. So instead of understanding a general concept, you learn specific instances. That&#x27;s certainly less elegant, and I&#x27;d guess just as complicated - but I&#x27;d say that&#x27;s more magic on C#&#x27;s side since in F# it&#x27;s just simple concepts repeated.<p>I don&#x27;t know if type providers are more complicated than partial classes, and they probably should have been some generic macro system instead of just type generators.<p>I don&#x27;t have a good definition for complicated, but I&#x27;d be surprised if C# is actually less complicated. (Something number of core concepts and interactions.) Certainly if we take expressiveness&#x2F;complication F# come out far ahead.