Applicative-based numeric instances.
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