code: func (f *FST) Debug(callback func(int, interface{}) error) error {
  
  	addr := f.decoder.getRoot()
  	set := bitset.New(uint(addr))
  	stack := addrStack{addr}
  
  	stateNumber := 0
  	stack, addr = stack[:len(stack)-1], stack[len(stack)-1]
  	for addr != noneAddr {
  		if set.Test(uint(addr)) {
  			stack, addr = stack.Pop()
  			continue
  		}
  		set.Set(uint(addr))
  		state, err := f.decoder.stateAt(addr, nil)
  		if err != nil {
  			return err
  		}
  		err = callback(stateNumber, state)
  		if err != nil {
  			return err
  		}
  		for i := 0; i < state.NumTransitions(); i++ {
  			tchar := state.TransitionAt(i)
  			_, dest, _ := state.TransitionFor(tchar)
  			stack = append(stack, dest)
  		}
  		stateNumber++
  		stack, addr = stack.Pop()
  	}
  
  	return nil
  }
docs: // Debug is only intended for debug purposes, it simply asks the underlying
  // decoder visit each state, and pass it to the provided callback.