     switch back {
     case .Nil: return Deque()
     case .Cons(_, let tail):
-      var ret = Deque(front: front, back: tail, fCount: fCount, bCount: bCount - 1)
+      var ret = Deque(front: front, back: tail)
       ret.check()
       return ret
     }
-  }
-}
-
-extension Deque : Indexable {
-  public var startIndex: Int { return 0 }
-  public var count     : Int { return fCount + bCount }
-  public var endIndex  : Int { return count }
-  public subscript(n: Int) -> Element {
-    get { return n < fCount ? front[n] : back[bCount - (n - fCount) - 1] }
-    set(v) { n < fCount ? (front[n] = v) : (back[bCount - (n - fCount) - 1] = v) }
   }
 }
 

    switch front {
    case .Nil: return Deque()
    case .Cons(_, let tail):
      var ret = Deque(front: tail, back: back, fCount: fCount - 1, bCount: bCount)
      ret.check()
      return ret
    }

    switch front {
    case .Nil: return nil
    case let .Cons(head, tail):
      front = tail
      return head
    }
