¿Cómo debo modificar mi clase de cola para permitir a los usuarios crear colas vacías de tipo no especificado en F #?

He creado una @ inmutabQueue en F # como sigue:

type Queue<'a>(f : 'a list, r : 'a list) =    
    let check = function
        | [], r -> Queue(List.rev r, [])
        | f, r -> Queue(f, r)

    member this.hd =
        match f with
        | [] -> failwith "empty"
        | hd :: tl -> hd

    member this.tl =
        match f, r with
        | [], _ -> failwith "empty"
        | hd::f, r -> check(f, r)

    member this.add(x) = check(f, x::r)

    static member empty : Queue<'a> = Queue([], [])

Quiero crear una instancia de un @ vacQueue, sin embargo, obtengo una excepción de restricción de valor:

> let test = Queue.empty;;

  let test = Queue.empty;;
  ----^^^^

C: \ Documents and Settings \ juliet \ Local Settings \ Temp \ stdin (5,5): error FS0030: restricción de valor. Se ha inferido que el valor 'test' tiene una prueba de tipo genérico val: Queue <'_ a> Defina' test 'como un término de datos simple, conviértalo en una función con argumentos explícitos o, si no tiene la intención de que sea genérico , agregue una anotación de tipo.

ásicamente, quiero el mismo tipo de funcionalidad que se ve en laSet módulo que me permite escribir:

> let test = Set.empty;;

val test : Set<'a>

¿Cómo puedo modificar miQueue clase para permitir a los usuarios crear colas vacías?

Respuestas a la pregunta(2)

Su respuesta a la pregunta