People often ask me how to find F# jobs. I don't have any special connections to companies using F#, and I don't have any special tricks either. I wish I did!
So, given that, here's my take on F# jobs.
For job hunting my suggestions are:
| (* | |
| WHAT'S GOING ON HERE?! | |
| Sometimes you don't care about a particular type, you're interested in one field only, let's say `EntityId`. | |
| Instead of using interface (which isn't even possible if don't own a type), | |
| we can do structural typing in F# using SRTP and Active Patterns. | |
| Active patterns are not required for this, but they do make code much easier to use. | |
| *) | |
| // So we have 2 types with field `EntityId: string`: |
| module TestingInterpreter = | |
| open CardManagement | |
| open System | |
| open CardDomain | |
| open CardManagement.Common.Errors | |
| open CardManagement.Common.CommonTypes | |
| open CardManagement.Common.CountryModule | |
| open CardProgramBuilder | |
| open CardManagement.Common |
| [<AutoOpen>] | |
| module PriorityQueue = | |
| [<AutoOpen>] | |
| module private Heap = | |
| type 'a Node = | |
| | Empty | |
| | Node of 'a NodeData | |
| and 'a NodeData = |
| let inline tryParse<'a when 'a: (static member TryParse: string * byref<'a> -> bool)> x = | |
| let mutable res = Unchecked.defaultof<'a> | |
| if (^a: (static member TryParse: string * byref<'a> -> bool) (x, &res)) | |
| then Some res | |
| else None | |
| let a = tryParse<int>("19") | |
| let b = tryParse<Guid>("4A9FA193-26D6-4D21-8610-02B060D43744") | |
| let c = tryParse<DateTimeOffset>("ddd") |
| module HexGrid = | |
| [<Struct>] | |
| type HexId = | |
| { | |
| X: int | |
| Y: int | |
| Z: int | |
| } | |
| with |
| let (|CosmosException|_|) (ex:exn) = | |
| match ex with | |
| | :? DocumentClientException as ex -> Some ex | |
| | :? AggregateException as ex when (ex.InnerException :? DocumentClientException) -> | |
| ex.InnerException :?> DocumentClientException |> Some | |
| | _ -> None | |
| let (|NotFoundInCosmos|_|) ex = | |
| match ex with | |
| | CosmosException ex when (ex.StatusCode = Nullable HttpStatusCode.NotFound) -> Some ex |
| namespace Fsion | |
| open System.Threading | |
| [<Struct;NoEquality;NoComparison>] | |
| type Cancel = | |
| private | |
| | Cancel of bool ref * children: Cancel list ref | |
| module internal Cancel = |
| type CosmosDbConfig = | |
| { | |
| Endpoint: string | |
| AuthKey: string | |
| } | |
| type ProductBlobConfig = | |
| { | |
| ConnectionString: string | |
| ContainerName: string |