Skip to content

Simplify CoreFV.FVAnn

When introducing type-in-type, Richard elaborated the free variable finder so that it finds three things at once (in CoreFV):

data FVAnn = FVAnn { fva_fvs    :: DVarSet   -- free in expression
                   , fva_ty_fvs :: DVarSet   -- free only in expression's type
                   , fva_ty     :: Type      -- expression's type
                   }

I think fva_ty is needed only to support fva_ty_fvs. And fva_ty_fvs seems to be used only to support the calls to freeVarsOfType in FloatIn. And those calls in turn are only to suppor used_in_ty in FloatIn.sepBindsByDropPoint.

In conversation yesterday, Richard and I agreed that all this is unnecessary. Coercion bindings simply do not float inwards, so we do not need to take these precautions. (We should add a Note to explain why they don't float, and what problem might arise if they did.)

To confirm this I set used_in_ty to False and compiled from scratch; everything is fine.

So I propose that we

  • get rid of the ty_fvs argument to sepBindsByDropPoint
  • simplfy FVAnn to just gather free variables (ie one field only)

Result: it's all simpler.

Richard will do this when he gets a moment. But I really hope for 8.2

Edited by Matthew Pickering
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information