emptyQueue
сама по себе пустая очередь;вам не нужно передавать ему какие-либо параметры.
MakeQ
- это произвольное имя, вы правы;это может быть что угодно (если вы изменили все другие варианты его использования).В данном случае это конструктор для Queue
: если xs
является списком a
значений (то есть имеет тип [a]
), то MakeQ xs
является Queue a
.Однако модуль не экспортирует MakeQ
, поэтому его нельзя использовать извне - он используется как часть реализации и скрыт для поддержки абстракции;его можно легко переписать с точки зрения другой структуры, не относящейся к списку, без нарушения кода, использующего модуль.
Операции с очередью выполняются не путем обновления существующей очереди на месте, а с помощью * 1016.* преобразование очереди в новые очереди.Например, если a
- это Int
, а q
- это Queue Int
, тогда enqueue a q
- это еще один Queue Int
с добавлением a
на оборотной стороне.Точно так же, если q
- это Queue Int
, то dequeue q
- это еще один Queue Int
без переднего элемента, а front q
- это сам передний элемент (Int
).
Также,обратите внимание, что Hugs больше не поддерживается;вам следует подумать об установке Haskell Platform , основанной на компиляторе GHC.Он содержит программу-интерпретатор, как и Hugs, поэтому это не просто стандартный компилятор.
Вот пример того, как этот модуль очереди можно использовать из интерактивного приглашения:
GHCi> let q = emptyQueue :: Queue Int
GHCi> let q1 = enqueue 42 q
GHCi> front q1
42
GHCi> let q2 = enqueue 43 q1
GHCi> front q2
43
GHCi> front (dequeue q2)
42
Если вы пытаетесь поддерживать очередь на протяжении всего выполнения программы, то, вероятно, вы захотите использовать монаду state , которая намного менее страшна, чем кажется.:) Я бы порекомендовал прочитать Learn You a Haskell , который является отличным учебным пособием по Haskell, охватывающим, помимо прочего, монаду состояния.