The `Data.Number.Dif`

module contains a data type, `Dif`

, that allows for
automatic forward differentiation.

All the ideas are from Jerzy Karczmarczuk's work, see http://users.info.unicaen.fr/~karczma/arpap/diffalg.pdf.

A simple example, if we define

foo x = x*x

then the function

foo' = deriv foo

will behave as if its body was 2*x.

# Documentation

The `Dif`

type is the type of differentiable numbers.
It's an instance of all the usual numeric classes.
The computed derivative of a function is is correct
except where the function is discontinuous, at these points
the derivative should be a Dirac pulse, but it isn't.

The `Dif`

numbers are printed with a trailing ~~ to
indicate that there is a "tail" of derivatives.

dVar :: Num a => a -> Dif aSource

The `dVar`

function turns a number into a variable
number. This is the number with with respect to which
the derivaticve is computed.