[ghc-steering-committee] #216: Qualified Do again, recommendation: accept the alternative

Joachim Breitner mail at joachim-breitner.de
Wed Apr 22 10:26:16 UTC 2020


Dear Committe,

trying to summarize the discussion here.

The main decision seems to be: Record based or module based.

   Record based is preferred by:
   Arnaud (one of the authors), SPJ

   Module based is preferred by:
   Richard (after changing his mind), Eric, Iavor, Vitaly, Alejandro,
   me

This is not a vote, merely a summary of sentimenss. But it seems that
maybe the onus to make stronger arguments for the record-based approach
is on Simon and Arnaud?


Related to the  module based variant, there was some discussion about
whether the
 * desugaring should go to a “qualified name”, that is then resolved 
   like any manually written name
   (i.e. could conceptually be done in the parser)
 * or if it should go directly a suitable “original name” of a suitable
   function, even if not explicitly imported
   (i.e. could conceptually be done in the renamer, but not the parser)

I initially advocated for the latter, arguing with a “you shall not
have to import stuff you do not write explicitly” rule.
But Simon’s recent argument that   

    import qualified Monad as M

(i.e. _with_ qualification, but _without_ an import list) will give the
developer a good user experience, and if they try to do things like 

    import Monad as M (runMonad)
    … M.do …

then, well, they shouldn’t. So I am happy to advocate for the module
based approach with the “must be in scope” rule. But maybe we should
keep the focus more on the fundamental question above.



We could keep in mind that eventually, people will ask for M.if; M.[
and other “qualified syntax”. But it seems that that will work equally
well with either choice here.

Cheers,
Joachim


-- 
Joachim Breitner
  mail at joachim-breitner.de
  http://www.joachim-breitner.de/




More information about the ghc-steering-committee mailing list