F#: The 'defaultArg' function
While reading through an old blog post by Matthew Podwysocki about writing F# code in a functional rather than imperative way I came across the 'defaultArg' function which I haven’t seen previously.
It’s quite a simple function that we can use when we want to set a default value if an option type has a value of 'None':
The type signature is as follows:
> defaultArg;;
val it : ('a option -> 'a -> 'a) = <fun:clo@0>
And the definition is relatively simple:
let defaultArg x y = match x with None -> y | Some v -> v
We could then use it if we were looking up a key in a dictionary but wanted to return a default value if there wasn’t an entry for that key.
For example:
let myMap = Map.add "key" "value" Map.empty
let result = defaultArg (Map.tryFind "nonExistentKey" myMap) "default"
> val result : string = "default"
This is just another of the utility functions we can use in F# to allow us to keep composing functions even when we can get more than one type of result from another function.
About the author
I'm currently working on real-time user-facing analytics with Apache Pinot at StarTree. I publish short 5 minute videos showing how to solve data problems on YouTube @LearnDataWithMark. I previously worked on graph analytics at Neo4j, where I also I co-authored the O'Reilly Graph Algorithms Book with Amy Hodler.