code: func (c *configuration) canApply(t transition) bool {
  
  	var h head
  	if t.Move == Left || t.Move == Right {
  		if t.Move == Left {
  			h = c.stackValue(0)
  		} else {
  			h = c.stackValue(1)
  		}
  
  		if h < 0 {
  			return false
  		}
  		if h == 0 && t.DependencyType != lingo.Root {
  			return false
  		}
  	}
  
  	stackSize := c.stackSize()
  	bufferSize := c.bufferSize()
  
  	if t.Move == Left {
  		return stackSize > 2
  	}
  
  	if t.Move == Right {
  		return stackSize > 2 || (stackSize == 2 && bufferSize == 0)
  
  		// if not single root build
  		// return stackSize >= 2
  	}
  
  	return bufferSize > 0 // strange other thing...
  
  }
docs: // var SingleRoot bool = true // make this part of a build process
  // canApply checks if a particular transition can be applied