I've reformulated the Graphic types again.
Instead of a single newtype with synonyms:
> newtype CF a = CF { unCF :: DrawingContext -> a}
> type LocCF u a = CF (Point2 u -> a)
I now have different newtypes for arity 0 and arity 1 & 2
> newtype CF a = CF { unCF :: DrawingContext -> a}
> newtype CF1 r1 a = CF { unCF1 :: DrawingContext -> r1 -> a}
> newtype CF2 r1 r2 a = CF { unCF2 :: DrawingContext -> r1 -> r2 -> a}
> type LocCF u a = CF1 (Point2 u) a
This should mean I can use standard Applicative and Monad combinators much more and depreciate the use of the arity combinators (prepro1, postpro2, situ1 etc.) in ContextFun.
At the moment I've just changed the types and got the Wumpus.Basic.* modules working, I haven't yet looked at improving the code or updated the Wumpus.Drawing.* modules.