Since in the end you're just evaluating numerically, using r=0.2, then there is not so much of a need to produce F(r) for a nonnumeric, symbolic `r` and then only afterwards evaluating at r=0.2. Also, your call to lowercase `int` with an integration range of x=0..`rob` for floating-point `rob` is going to eventually involve a numerical integration.

With that in mind, perhaps one easy way is to try doing it purely numerically. D(IN) will return unevaluated here, and evalf(D(IN)(value)) will call fdiff the numerical differentiator.

> ING := D(IN):
> evalf(ING(.2));
-14
-0.6067953678 + 3.272366947 10 I
> # that small imaginary component is just due to numeric roundoff.
> # evaluating at higher working precision makes it more negligible.
> evalf[20](ING(.2));
-25
-0.60679536790134102510 - 5.3295064630932992395 10 I
> # we can remove the imaginary term (safely, ie. only if "small" enough)
> simplify(fnormal(evalf(ING(0.2))));
-0.6067953678

If you don't want to see tha small imaginary artefact, at all, then you could try changing your definition of IN.

> IN:=r->abs(F(r))^2/N;
2
|F(r)|
r -> -------
N
> ING := D(IN):
> evalf(ING(.2));
-0.6067953678

Another reason for using that modified version of IN is that it only computes F(r) once, but your version computed it twice (not an actual problem here, as evalf/Int may store the first result in its remember table, but maybe good to realize and be aware of for some future example).

There are other ways to get the result, but you'd have to be careful if you use `diff`, including avoiding the error of having it try to differentiate w.r.t a number.

Part of the confusion here is the way in which you form `h`, `H`, `F`, and `IN` all as operators which call the previous one. And preassigning all those parameters with floating-point values, at the top of the sheet, does not help with that approach. Those two aspects of writing worksheets are extremely popular amongst new users, but in my opinion they both make it harder to use Maple effectively.

If you really wanted to compute IN(r) for symbolic `r` then you might have an easir time with it by using expressions instead of those unnecessary operators. (That's just my opinion.) On the other hand, if you *only* ever want to evaluate `IN` or its derivative at some actual *floating-point* numbers then using operators is OK, but in that case don't do things like eval(IN(r),r=0.2) which first calls IN at unassigned *symbolic* `r`.