United Kingdom: +44 (0)208 088 8978

.NET 6 features in F# 6

In this post, we take a look at some features from .NET 6 and how you can use them in your F# code.

We're hiring Software Developers

Click here to find out more

With F# 6 we gain access to new features in .NET 6. There are many of these but here is a very small sample which are applicable to F# developers.

DateOnly and TimeOnly

Are you tired of using DateTime or DateTimeOffset to capture values that are just a date or just a time? Now you don't have to. The new DateOnly and TimeOnly types solve that problem with their self-explanatory names. Here's a small example of how to use them in F#.

open System

let dateTime = DateTime(2022, 1, 1, 14, 30, 00)
// 2022-01-01 14:30:00

let date = DateOnly.FromDateTime(dateTime)
// 2022-01-01

date.AddDays 100
// 2022-11-04

let time = TimeOnly.FromDateTime(dateTime)
// 14:30

time.AddHours 12
// 02:30

As you can see, we still have the relevant methods to add periods of time onto the existing date or time.

Priority queue

This is a new data structure that is like a queue but allows assigning different priorities to items when adding them to the queue. Higher priority items will always be dequeued before lower priority items.

open System.Collections.Generic

// Make a priority queue where the values are strings and the priorities are integers
let pq = PriorityQueue<string, int>()

pq.Enqueue("Medium priority A", 2)
pq.Enqueue("High priority", 1)
pq.Enqueue("Low priority", 3)
pq.Enqueue("Medium priority B", 2)

pq.Dequeue() // "High priority"
pq.Dequeue() // "Medium priority B"
pq.Dequeue() // "Medium priority A"
pq.Dequeue() // "Low priority"

Note that the 2 medium priority items could be returned in any order because stability is not guaranteed.

Some more improvements in .NET 6