text: function Queue () {
    this.head = new Item('head', null)
  }
  module.exports = Queue
  
  Queue.prototype.append = function append (kind, value) {
    var item = new Item(kind, value)
    this.head.prepend(item)
    return item
  }
  
  Queue.prototype.isEmpty = function isEmpty () {
    return this.head.prev === this.head
  }
  
  Queue.prototype.first = function first () {
    return this.head.next
  }
  
  function Item (kind, value) {
    this.prev = this
    this.next = this
    this.kind = kind
    this.value = value
  }
  
  Item.prototype.prepend = function prepend (other) {
    other.prev = this.prev
    other.next = this
    other.prev.next = other
    other.next.prev = other
  }
  
  Item.prototype.dequeue = function dequeue () {
    var prev = this.prev
    var next = this.next
  
    prev.next = next
    next.prev = prev
    this.prev = this
    this.next = this
  
    return this.value
  }
  
  Item.prototype.isEmpty = function isEmpty () {
    return this.prev === this
  }
  