Variations in F#

Professional developer?

Information on this site is focused on students and researchers. If you are a professional developer interested in F#, you may want to use F# in Visual Studio 2010. For more information look at:

Microsoft F# Developer Center
F# Case Studies
Cross Platform Screencasts

Video tutorials on installing and using F# command line tools on Linux and Mac.

MonoDevelop Language bindings

If you’re looking for open-source tools for developing F# applications, you can try F# language bindings for MonoDevelop:

F# for MonoDevelop
Source code repository
This is an open source project and we’re always looking for contributors. If you’re considering helping get in touch.

Related F# projects

Cross-platform downloads – get installer for Mac and packages for Linux
Cross-platform packages and samples – samples of using F# with cross-platform libraries such as OpenGL
F# PowerPack – additional open-source libraries and tools for F#

Variations in F#

As a functional programming language, F# makes it easy to express complex ideas in a succinct way. F# is also a statically typed and compiled, which means that it can be used to build efficient implementations. This makes it a great language for implementing research projects and prototypes.

Additionaly, F# is distributed with a source code under a license that allows modification for academic purposes. This opens the possibility for programming language research based on the F# language. A modified version of F# built from the source code can be easily integrated in MonoDevelop using the open-source language binding.

The rest of the page lists several interesting research projects that either extend F# or were created mainly using F#. Below you can also find a list of recent publications related to the F# language itself. If you know about (or work on) a project that uses F# and is not in the list, please let us know.

Related Research Projects

F7: Refinement Types for F#

Karthik Bhargavan, C??dric Fournet and Andy Gordon, Microsoft Research Cambridge

F7 is an enhanced typechecker for F#. F7 supports static checking of properties expressed with refinement types. The motivation is to check various security properties of F# implementation code by typing. For more information about the project, visit the project homepage.


A collaboration between EMIC, Aachen, Germany and the RiSE group, MSR Redmond

VCC is a mechanical verifier for concurrent C programs. VCC takes a C program, annotated with function specifications, data invariants, loop invariants, and ghost code, and tries to prove these annotations correct. If it succeeds, VCC promises that your program actually meets its specifi­cations. VCC is implemented in F#.

Academic Publications about F#

Joinads: a retargetable control-flow construct for reactive, parallel and concurrent programming

Tomas Petricek and Don Syme

Modern challenges led to a design of a wide range of programming models for reactive, parallel and concurrent programming, but these are often difficult to encode in general purpose languages. We present an abstract type of computations called joinads together with a syntactic language extension that aims to make it easier to use joinads in modern functional languages.

Our extension generalizes pattern matching to work on abstract computations. It keeps a familiar syntax and semantics of pattern matching making it easy to reason about code, even in a non-standard programming model. We demonstrate our extension using three important programming models a reactive model based on events; a concurrent model based on join calculus and a parallel model using futures. All three models are implemented as libraries that benefit from our syntactic extension. This makes them easier to use and also opens space for exploring new useful programming models.

The F# Asynchronous Programming Model

Don Syme, Tomas Petricek and Dmitry Lomov

We describe the asynchronous programming model in F#, and its applications to reactive, parallel and concurrent programming. The key feature combines a core language with a non-blocking modality to author lightweight asynchronous tasks, where the modality has control flow constructs that are syntactically a superset of the core language and are given an asynchronous semantic interpretation. This allows smooth transitions between synchronous and asynchronous code and eliminates callback-style treatments of inversion of control, without disturbing the foundation of CPU-intensive programming that allows F# to interoperate smoothly and compile efficiently to .NET and native code. An adapted version of the idea presented in this paper is under consideration for addition to the C# programming language.

Collecting Hollywood’s Garbage: Avoiding Space-Leaks in Composite Events

Tomas Petricek and Don Syme

The reactive programming model is largely different to what we’re used to as we don’t have full control over the application’s con-trol flow. If we mix the declarative and imperative programming style, which is usual in the ML family of languages, the situation is even more complex. It becomes easy to introduce patterns where the usual garbage collector for objects cannot automatically dispose all components that we intuitively consider garbage.

In this paper we discuss a duality between the definitions of garbage for objects and events. We combine them into a single one, to specify the notion of garbage for reactive programming model in a mixed functional/imperative language and we present a formal algorithm for collecting garbage in this environment.

Building on top of the theoretical model, we implement a library for reactive programming that does not cause leaks when used in the mixed declarative/imperative model. The library allows us to safely combine both of the reactive programming patterns. As a result, we can take advantage of the clarity and simplicity of the declarative approach as well as the expressivity of the imperative model.

Functional programming languages

A random selection of other functional languages that are currently popular and frequently used:

Haskell is a purely functional, lazy language with strong theoretical foundations.
Racket is a Scheme based, highly customizable, dynamic functional language.
OCaml is a mixed functional and object oriented functional language that motivated F#
Scala is a modern multi-paradigm functional language that runs on the JVM.
Erlang is a concurrent language with functional core with built-in support for message passing.
Teaching functional programming

Some interesting books, initiatives and web pages dedicated to teaching functional programming:

Programming in Haskell by Graham Hutton used in Channel9 lectures by Erik Meijer
The Haskell School of Expression by Paul Hudak Learning functional programming using graphics, animation and computer music
TeachScheme! project that aims to create better teaching environment using the Scheme language and to make it easily available
Haskell in Education at the Haskell wiki
Something important missing? Please, let us know!

Ways To Install New String

Get rid of the pin from the head.
Cut the ideal size of string.
Feed one end with the opening on the spindle
There need to be an arrowhead on the spindle, which shows the instructions where the string have to be wound. When winding the string into the spindle, follow this instructions.
Safeguard completions right into the notches offered on the spindle.
Place the spindle back right into the leaner, guaranteeing that completions are threaded via the openings on the spinning head.
Launch the string from the notches.
For self winding spindles, simply shoelace the string right into the spindle and also transform the head up until the string is completely spooled.

When speaking regarding string vs gas leaners, gas leaners are a lot more powerful compared to string leaners. If you are to be utilizing a string leaner, you need to be just doing light work with is.
Best gas string trimmer

our string leaner will certainly call for normal re-filling. If you comply with a couple of easy guidelines, this could conveniently be attained

When going over gas string leaners, it is tough to not discuss the various sorts of engines: Four-Cycle as well as Two-Cycle.

Gas string leaners are extremely effective. Any type of huge tasks must be done with a gas string leaner. If you intend to be reducing readily, having a gas leaner could make all the distinction.

These gas string leaners are very effective. 4 Cycle engines make it a lot simpler to begin the leaner. This is due to the reality that they do not have to have a gas as well as oil mix.
Currently, 2 cycle engines are the specific reverse of four-cycle engines. The sound degree is loud as well as it makes use of a mix of oil as well as gas. This kind of leaner is fantastic for squashing brushes.
The brush-cutting blade on this strimmer is outstanding and also has bicycle-style handlebars for enhanced ability to move. The terrific aspect of brush cutters is they are produced a certain location of grass treatment which indicates you could acquire it independently from various other string leaner kinds.

With the proper tools, maintaining your yards trim as well as cool and also the weeds away need to be achieved effortlessly. This weed whacker testimonial need to aid you in discovering the most effective weed eater to keep your home or business.
The best ways to Pick a String Trimmer


The content of this page is licensed under
Creative Commons Attribution 2.5 License