code: func (n *EvalApplyPost) Eval(ctx EvalContext) (interface{}, error) {
  	state := *n.State
  
  	if resourceHasUserVisibleApply(n.Addr) {
  		absAddr := n.Addr.Absolute(ctx.Path())
  		var newState cty.Value
  		if state != nil {
  			newState = state.Value
  		} else {
  			newState = cty.NullVal(cty.DynamicPseudoType)
  		}
  		var err error
  		if n.Error != nil {
  			err = *n.Error
  		}
  
  		hookErr := ctx.Hook(func(h Hook) (HookAction, error) {
  			return h.PostApply(absAddr, n.Gen, newState, err)
  		})
  		if hookErr != nil {
  			return nil, hookErr
  		}
  	}
  
  	return nil, *n.Error
  }
docs: // TODO: test