+type TransformMonad = Writer.WriterT Monoid.Any TranslatorSession
+
+-- | In what context does a core expression occur?
+data CoreContext = AppFirst -- ^ The expression is the first
+ -- argument of an application (i.e.,
+ -- it is applied)
+ | AppSecond -- ^ The expression is the second
+ -- argument of an application
+ -- (i.e., something is applied to it)
+ | LetBinding -- ^ The expression is bound in a
+ -- (recursive or non-recursive) let
+ -- expression.
+ | LetBody -- ^ The expression is the body of a
+ -- let expression
+ | LambdaBody -- ^ The expression is the body of a
+ -- lambda abstraction
+ | Other -- ^ Another context
+ deriving (Eq, Show)