Entertainment at it's peak. The news is by your side.

How to Use F# from C#


F# is a purposeful programming language that compiles to .NET Intermediate Language (IL). C# is popping into a extra purposeful programming language. Basically the most in vogue version of C# (9) has fresh aspects that obtain purposeful programming extra accessible. The actual files is that because each languages compile to IL, we are in a position to exhaust them interchangeably. We can reference F# projects in C# projects and vice versa. Also, with utilizing dnSpy, we are in a position to convert IL to C#. This text explains compile an F# assembly (IL) and then reference it in C# or convert it to C#. It offers C# programmers the prosperous feature space of F# with out having to port the total code.

Toughen this blog and join my course Introduction to Uno Platform.

What’s Functional Programming?

The Wikipedia text explains it properly.

In computer science, purposeful programming is a programming paradigm the place applications are constructed by making exhaust of and composing capabilities. It’s a declarative programming paradigm in which feature definitions are timber of expressions that every return a price, somewhat than a sequence of imperative statements which replace the direct of this system.

In purposeful programming, capabilities are handled as top notch citizens, meaning that they may be able to even be sure to names (along with native identifiers), handed as arguments, and returned from diversified capabilities, appropriate as any diversified files form can. This enables applications to be written in a declarative and composable vogue, the place minute capabilities are blended in a modular contrivance.

We in total divide languages into two categories: purposeful and imperative. The imperative technique specializes in supplying step by step instructions in loops, while purposeful languages count on expressions and the idea that of increased uncover capabilities for a extra declarative vogue. We in total call C# an imperative language and F# a purposeful language, but you need to achieve that neither language is purely purposeful or imperative, and each absorb imperative and purposeful constructs. So, it will even be deceptive to categorize either of them. In C#, you’re free to combine ‘n match the approaches. Purists would argue that mixing the approaches is a unpleasant idea, but you’re doubtlessly already utilizing some C# purposeful constructs, as you’re going to gaze. It’s as a lot as you and your team to grab how noteworthy of a purposeful technique you grab with C# code.

Higher-uncover Suggestions

As talked about above, a increased-uncover feature is a feature that accepts one or extra capabilities as a parameter or returns a feature. In the event you’ve old LINQ lamdas in C#, you’ve doubtlessly old increased-uncover capabilities. As an instance, Enumerable.Where is a increased-uncover feature. It takes a feature as a parameter. You would derive a feature as a variable and pass the feature to the Where ability. As an instance, this ability returns simplest strings which absorb a length of one personality.

The crucial phase above is that we created a feature internal a feature, and we certain the feature to the name predicate. We call these top notch capabilities because we take care of the capabilities treasure any diversified files form.

Right here is simplest one part of purposeful programming. Functional programming is a total paradigm that encourages programmers to technique programming in a in reality diversified contrivance. F# strongly encourages purposeful programming from the bottom up. On the diversified hand, C# is a versatile language that enables purposeful, imperative, and object-oriented constructs. 

Expressions Vs. Statements

In a nutshell, purposeful programming uses expressions, while imperative programming uses statements. Statements disclose the compiler what to construct step by step, while expressions return values with out basically requiring sequential definition. Aid in thoughts these two C# suggestions. Both accomplish the same result, however the ability that uses statements is noteworthy extra explicit and verbose about what it’s far doing.

Expressions in F# are just appropriate-trying, and C# borrows constructs from it. The magnificence of F# expressions may presumably even be a nice motive to obtain about a of your code in F#. SQL maps to F# Query expressions in a short time.


One other key idea in the purposeful programming world is immutability. In reality, it ability that after we originate a variable, it’s files must always now not replace. More importantly, the language or runtime must always provide tools to be determined that that the records would now not replace. We exhaust legend forms in C# and F# for this cause and immutable lists for files collections. Info earn their values right through construction and construct now not provide a mechanism for altering the records after construction.

Right here is an instance of a legend in F#. Very merely, this model accepts three ints as constructor parameters, and likewise you may presumably presumably’t replace these values after construction.

form Level = { X: int; Y: int; Z: int; }

Right here is the utilization in F#.

let point = { X = 1; Y = 2; Z = 3; }

Right here is the utilization in C#. Sure, you’re going to be in a spot to straight exhaust these forms from C#.

var point = fresh FSharpLibrary.Level(1, 2, 3);

C# 9 provides legend forms. Right here is an instance of a legend in C#:

public legend CsharpPoint(int X, int Y, int Z);


var csharpPoint = fresh CsharpPoint(1, 2, 3);

While C# has had increased-uncover capabilities for the reason that early days, adding immutability with legend forms is a definite signal that the language designers are intentionally adding extra purposeful constructs to the language. C# will seemingly evolve in this path, and C# programmers will doubtlessly must study extra about purposeful programming.

F# Lists

F# lists are immutable by default. You can’t add or grab away items from the list with out constructing a fresh list. You would exhaust F#’s immutable lists in C# straight. You don’t even must add an F# project. To exhaust F# lists in C#, add the FSharp.Core Nuget equipment to your C# project. Right here is an instance C# console app. 


1, 2, 3

Video display: the C# favorite for immutable lists is ImmutableList. You would examine immutable collections in C# right here. It’s phase of the Diagram.Collections.Immutable NuGet equipment.

Discriminated Unions

Discriminated unions are equivalent to inheritance in object oriented programming. Right here is an instance in F#.

You would straight exhaust this in C#

Gaze you’re going to be in a spot to gaze it in the sample repo right here.

How one can Reference F# Code in C#

Compiled F# assemblies are most frequently connected to C# assemblies. The very best contrast is that F# assemblies, by default, rely on the library FSharp.Core. It’s appropriate a NuGet equipment that you’re going to be in a spot to reference from C#. You would pick this sample right here.

On the foundation, verify that you’re going to absorb gotten the F# tools installed. You doubtlessly construct.

Make an F# .NET class library 

Exchange to scheme .NET Long-established 2.1

Make a C# .NET Core console app (3.1) unless you absorb already got a project you need to leverage F# from.

Reference the F# project from the C# project. 

You would now straight exhaust code from the F# library on your C# console app. It’s that uncomplicated.

How one can Convert F# to C#

F# compiles to .NET IL, and likewise you’re going to be in a spot to exhaust dnSpy to convert IL to C#. Right here is immense for two reasons. On the foundation, F# is fully clear. You don’t must bet what it’s far doing. You would survey on the C# version and gaze the way it the truth is works. Secondly, you may presumably also exhaust compiled F# code as a cookie-cutter for C# code. You may presumably also obtain your self in a anxiety the place you need to obtain purposeful code with F#, but you may presumably presumably’t exhaust F# on your team. On this case, you’re going to be in a spot to jot down the F# and walk the following C# into your project.

  • Obtain and install dnSpy. Right here is a immense instrument that strive to be utilizing to seek for code internal .NET DLLs
  • Bring together your F# project
  • Delivery the compiled assembly in the bin folder in dnSpy
  • You can gaze the construction of the IL reworked to C#
  • You would straight copy and paste this code into a C# project or export your total code as C#.

Right here’s what the F# Level legend form looks treasure when opened in dnSpy and reworked to C#

Click on on the characterize to survey your total code

Right here is identical thing with a C# legend and considered in dnSpy.

Click on on the characterize to survey your total code

Click on on these footage to survey your total code. Raise some time to compare C# files to F# files. It’s crucial to achieve that every languages camouflage some complexity and likewise you received’t basically know about it.

Does this imply F# is Pointless?

No. F# is an unbelievable language. As you’re going to be in a spot to gaze, it’s far much less verbose to jot down purposeful-vogue code in F# than C#. It’s so simple that any person that understands C# can begin utilizing it with out lustrous anything about the language. In the event you’re already writing purposeful vogue C# code, you’re going to seemingly write loads much less code by interesting chunks to F#. 

Mixing and Matching

F# is a extra opinionated language than C#. As you’re going to be in a spot to gaze, it hides many of the complexity of the forms that we gaze in C#. There may be also a form of duplication between C# and F#. F#’s lists are now not connected to immutable lists in Diagram.Collections.Immutable and files are now not the same beneath the hood, either. So, is it helpful to exhaust F# forms in C#?

The respond is dependent upon your project and your team. Transparency is important because F# forms may presumably also now not behave expectedly. C# builders may presumably also obtain caught out of their delicate variations. In the event you make exhaust of F# forms, be determined that your team is of the same opinion to this, and that’s properly understood. Don’t exhaust F# forms unnecessarily. As an instance, you’re going to seemingly absorb much less pains with C# files than F# files in C#. However, for folks that obtain a total library with F#, there is now not any motive you’re going to be in a spot to’t leverage this with C#. Also, there is now not any motive you may presumably presumably’t exhaust libraries treasure Diagram.Collections.Immutable in F# so as that immutable lists are properly capable with C#.  

As continuously, conversation is important. Don’t be the person that sits in a corner doing unprecedented stuff simplest to obtain known as into an feature of enterprise to fresh what a monad is because no person else has heard of it before. Reveal them in the event that they obtain your model life more straightforward, and your team understands. In every other case, exhaust diplomacy and comfortable persuasion.

Stop the Tribalism

No community has a monopoly on purposeful programming. F# is a immense instrument for writing purposeful code while you’re going to be in a spot to exhaust it, but that would now not imply you mustn’t exhaust purposeful-vogue programming in C#. In the event you’re an F# programmer and obtain your self on a project with simplest C#, fresh how F# will even be leveraged within fresh C# infrastructure. In the event you’re a C# programmer, close and mediate about your total purposeful vogue programming you’ve already done. Lambda Expressions would now not exist if purposeful proponents failed to push for purposeful programming in the C# situation. C# is merely now not a pure imperative or object-oriented language. It clearly has capabilities of multiple paradigms, and likewise you’re now not getting the advantages of the language and platform for folks that reject purposeful-vogue programming.

There may be now not any situation in the .NET ecosystem for antagonism between the groups of programmers. They’re each tools we are in a position to exhaust to resolve issues. Stop thinking of your self as a C# or F# developer, and mediate of your self as a .NET developer. Both languages complement .NET.


F# and C# each compile to .NET libraries. You may presumably also obtain code for F# in C#, and likewise you’re going to be in a spot to obtain code for C# in F#. You would convert F# code to C# with dnSpy. The technique forward for C# is purposeful. F# is one other instrument on your arsenal. Check on the languages as complementary – now not mutually engrossing. Reveal F#. Don’t be shy of it. There’ll be price in studying a tiny bit about it even for folks that don’t program in pure F#. In the event you’re going to be in a spot to, strive breaking about a of your libraries off into F#. You may presumably also obtain that there is much less code to derive, and likewise you may presumably also obtain unexpected advantages from a extra purposeful technique. When discussing purposeful programming on your team, begin with C#, and a few of us may presumably also warm to migrating parts of the codebase to F#.

Read More

Leave A Reply

Your email address will not be published.