Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there conditional access operator in F# (similar to new ?. in C#)?

Tags:

f#

Now that the C# 6 is finally going to have this long-anticipated ?. operator, is there similar thing in F#? And I'm not talking about ? operator.

like image 611
Endrju Avatar asked Jun 06 '14 08:06

Endrju


2 Answers

Idiomatic F# doesn't have null values at all, so what use would it be? In F#, the most common way to model the absence of a value is to use option.

When I need to interoperate with .NET code that may return null, I convert it to an option as soon as possible, using a function like this:

let toOption (x : obj) =
    match x with
    | null -> None
    | _ -> Some x

As soon as you have your value modelled as an option, you can compose it with e.g. Option.map, and that serves the same purpose (but better, and safer) than the proposed C# operator.

like image 114
Mark Seemann Avatar answered Jun 20 '23 09:06

Mark Seemann


In functional languages, conditional / compositional traversal, especial in nested structures is generally modelled using the notion of lenses which is explained with a succinct example in this SO thread.

In the F# environment, there's Aether; see intro article and guide, which builds on the Lenses support developed and written about by Mauricio Scheffer in FSharpx here.

like image 42
Ruben Bartelink Avatar answered Jun 20 '23 10:06

Ruben Bartelink