Write FFEffect as a GADT.

This is done in order to put a class constraint on the type of effect.
The EffectTypeClass must not be exported.