Я создал неизменяемый Queue
в F # следующим образом:
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([], [])
Я хочу создать экземпляр пустого Queue
, однако я получаю исключение ограничения значения:
> let test = Queue.empty;;
let test = Queue.empty;;
----^^^^
C:\Documents and Settings\juliet\Local Settings\Temp\stdin (5,5): ошибка FS0030: Ограничение стоимости. Значение "тест" было выведено, чтобы иметь общий тип val test: Queue < '_ a > Определите "тест" как простой термин данных, сделайте его функцией с явным аргументы или, если вы не собираетесь использовать его в качестве общего, добавьте аннотацию типа.
В принципе, мне нужна такая же функциональность, что и в модуле Set
, который позволяет мне писать:
> let test = Set.empty;;
val test : Set<'a>
Как я могу изменить класс Queue
, чтобы позволить пользователям создавать пустые очереди?