         throw new Error("ack node missing")
       _nodelog node, "checking #{this} against", node, [this, node]
       res = @_check(node, descend)
-      _nodelog node, "result for #{this} againt", node, "is #{res}", [this, node, res]
+      _nodelog node, "result for #{this} against", node, "is #{res}", [this, node, res]
       return res
 
     _check: (node, descend) =>

      "#{@pattern}+"
    nullable: =>
      @pattern.nullable()
    _check: (node, descend) =>
      p1 = @pattern.check(node, descend)
      if p1 instanceof NotAllowed
        return p1
      return new Group(p1, new Choice(new Empty(), this))
    attrCheck: (node) =>
      p1 = @pattern.attrCheck(node)
      return (new Group(p1, new Choice(new Empty(), this)))

  class List extends Pattern
    constructor: (pattern) ->

      "(#{@pattern1} & #{@pattern2})"
    nullable: =>
      @pattern1.nullable() and @pattern2.nullable()
    require: =>
      p1 = @pattern1.require()
      if p1 instanceof Empty
        return @pattern2.require()
      p2 = @pattern2.require()
      if p2 instanceof Empty
        return p1
      if p1 instanceof GoodElement and p2 instanceof GoodElement
        return p1
      if p1 instanceof NotAllowed
        return p1
      if p2 instanceof NotAllowed
        return p2
      return p2

    _check: (node, descend) =>
      if @pattern1 instanceof NotAllowed or @pattern2 instanceof Empty
        return @pattern1.check(node, descend)
