Any applicative functor can be given numeric instances in a boilerplate way.
The *applicative-numbers* package provides an include file that makes it a
snap to define these instances.
See `Data.Numeric.Function`

for an example.

Project wiki page: http://haskell.org/haskellwiki/applicative-numbers

Copyright 2009-2013 Conal Elliott; BSD3 license.

Instances of `Num`

classes for applicative functors. To be `#include`

'd after
defining `APPLICATIVE`

as the applicative functor name and `CONSTRAINTS`

as a
list of constraints, which must carry its own trailing comma if non-empty.
The `APPLICATIVE`

symbol gets `#undef`

'd at the end of the include file, so
that multiple includes are convenient.

For instance,

```
#define INSTANCE_Ord
#define INSTANCE_Enum
#define APPLICATIVE Vec2
#include "ApplicativeNumeric-inc.hs"
#define APPLICATIVE Vec3
#include "ApplicativeNumeric-inc.hs"
#define APPLICATIVE Vec4
#include "ApplicativeNumeric-inc.hs"
```

You'll also have to import `pure`

and `liftA2`

from `Control.Applicative`

and specify `the FlexibleContexts`

language extension (due to an implementation hack).

Some instances are generated only if a corresponding CPP symbol is
defined: `INSTANCE_Eq`

, `INSTANCE_Ord`

, `INSTANCE_Show`

, `INSTANCE_Enum`