Why is C# a functional programmming language?

C# has borrowed a lot of features from ML and Haskell for example:

  • C# 2.0 brought us parametric polymorphism (or “generics”). I’ve heard that Dom Syme, one of the creators of F#, was largely responsible for implementing generics in the .NET BCL.

  • C# 2.0 also allows programmers to pass and returns functions as values for higher-order functions, and has limited support for anonymous delegates.

  • C# 3.0 and 3.5 improved support anonymous functions for true closures.

  • LINQ can be considered C#’s own flavor of list comprehensions.

  • Anonymous types look like an approximation of ML records

  • Type-inference is a given.

  • I don’t know about you, but C# extension methods look an awful lot like Haskell type classes.

  • There’s been a lot of talk about the “dynamic” keyword in C# 4.0. I’m not 100% sure of its implementation details, but I’m fairly sure its going to use structural typing rather than late binding to retain C#’s compile time safety. Structural typing is roughly equivalent to “duck typing for static languages”, its a feature that Haskell and ML hackers have been enjoying for years.

This isn’t to say that C# is a functional programming language. Its still missing important features such as pattern matching, tail-call optimization, and list and tuple literals. Additionally, idiomatic C# is fundamentally imperative with a heavy dependence on mutable state.

I wouldn’t necessarily consider some of those features mentioned above as exclusive to functional programming languages, but its pretty clear that the C# developers have taken a lot of inspiration from functional programming languages in the past few years.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)