Had to implement the same kind of logic with associated datatypes
rather than type synonyms. This is because it allows us to package
up dependencies much more nicely.

Now this packaging could also be applied to ReduceGrid.
The same kind of reasoning easily applied to ReduceGrid too. This
lead to a very nice reduction in the amount of parameters to
ReduceGrid.