The sieve of Eratosthenes in F#

Estoy interesado en una implementación de latamiz de eratóstenes en F # puramente funcional. Estoy interesado en una implementación del tamiz real,no la ingenua implementación funcional que no es realmente el tamiz, así que no es algo como esto:

let rec PseudoSieve list =
    match list with
    | hd::tl -> hd :: (PseudoSieve <| List.filter (fun x -> x % hd <> 0) tl)
    | [] -> []

El segundo enlace anterior describe brevemente un algoritmo que requeriría el uso de un mapa múltiple, que no está disponible en F # hasta donde yo sé. La implementación de Haskell dada utiliza un mapa que admite uninsertWith método, que no he visto disponible en elMapa funcional F #.

¿Alguien sabe una manera de traducir el código de mapa de Haskell dado a F #, o tal vez conoce métodos de implementación alternativos o algoritmos de tamizado que sean tan eficientes y más adecuados para una implementación funcional o F #?

Respuestas a la pregunta(14)

Su respuesta a la pregunta