code: func dethunkMapDepthFirst(m map[string]interface{}) {
  	for k, v := range m {
  		if f, ok := v.(func() interface{}); ok {
  			m[k] = f()
  		}
  		switch val := m[k].(type) {
  		case map[string]interface{}:
  			dethunkMapDepthFirst(val)
  		case []interface{}:
  			dethunkListDepthFirst(val)
  		}
  	}
  }
docs: // dethunkMapDepthFirst performs a serial descent of the map, calling any thunks
  // in the map values and replacing each thunk with that thunk's return value. This is needed
  // to conform to the graphql-js reference implementation, which requires serial (depth-first)
  // implementations for mutation selects.