> but I still don't quite understand the motivation

I give a concrete example (something that happened to me that I had to debug in
runtime) in the issue I linked in my original post.

> For example, delVarEnv will only work with a Var, not a Name.

delVarEnv will happily accept a NameEnv in its first argument, which is the
problem I was trying to describe.

Ömer

Richard Eisenberg <r...@richarde.dev>, 14 Oca 2020 Sal, 01:55 tarihinde
şunu yazdı:
>
> I'd be fine with making these newtypes, but I still don't quite understand 
> the motivation. Note that the specialized functions for the different 
> instances of UniqFM all have type signatures. For example, delVarEnv will 
> only work with a Var, not a Name.
>
> Was there a different scenario that you want to avoid?
>
> Thanks,
> Richard
>
> > On Jan 13, 2020, at 9:10 AM, Ömer Sinan Ağacan <omeraga...@gmail.com> wrote:
> >
> > Hi,
> >
> > UniqFM and UniqDFM types are basically maps from Uniques to other stuff. 
> > Most of
> > the time we don't actually map Uniques but instead map things like Vars or
> > Names. For those we have types like VarEnv, NameEnv, FastStringEnv, ... 
> > which
> > are defined as type synonyms to UniqFM or UniqDFM, and operations are 
> > defined
> > like
> >
> >    extendFsEnv = addToUFM
> >    extendNameEnv = addToUFM
> >    extendVarEnv = addToUFM
> >
> > This causes problems when I have multiple Uniquables in scope and use the 
> > wrong
> > one to update an environment because the program type checks and does the 
> > wrong
> > thing in runtime. An example is #17667 where I did
> >
> >    delVarEnv env name
> >
> > where `name :: Name`. I shouldn't be able to remove a Name from a Var env 
> > but
> > this currently type checks.
> >
> > Two solutions proposed:
> >
> > - Make these env types newtypes instead of type synonyms.
> > - Add a phantom type parameter to UniqFM/UniqDFM.
> >
> > If you could share your opinion on how to fix this I'd like to fix this 
> > soon.
> >
> > Personally I prefer (1) because it looks simpler but I'd be happy with
> > (2) as well.
> >
> > Ömer
> > _______________________________________________
> > ghc-devs mailing list
> > ghc-devs@haskell.org
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to