¿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?