[m-users.] My experiences with inst declarations and making them more user-friendly

Charles Shuller charles.shuller at gmail.com
Fri Mar 15 00:54:40 AEDT 2019


Regarding syntactic sugar:   Most of the syntactic sugar I've encountered
has been a source of problems, not a resolution for them.   Of course, this
may just be because "good" semantic sugar is completely transparent, and
never gets in my way, but it seems the most difficult "features" and
biggest sources of bugs I've encountered in many languages is a direct
result of the semantic sugar.


   - Good syntactic sugar (highly constrained, small translation unit, easy
   to explain to users):  hello[1:3] -> slice(hello, 1, 3).
   - Bad syntactic sugar (broad in scope, large translation unit, hard to
   explain to users):   Haskell do-block notation
   - Bad syntactic sugar (limited in scope, large translation unit, hard to
   explain to users): Async and Await in JavaScript -- These wind up being
   small words that wrap things up in promises, and using them properly
   WITHOUT already knowing about how promises work is next to impossible.




====A bit of an illustration on why Haskell made me think syntactic sugar
is good for only very specific uses====

As an example of bad syntactic sugar, I've found Haskell's do-block
notation to be a truly horrifying experience for the following reasons:

   1. Do Block starts out as a way to avoid monads, and can let a student
   FEEL like hello-world is actually easy but...
   2. One still has build up an intuitive understanding of the theoretical
   framework for monads for any real work, since Haskell libraries are chock
   full of them, and assume users know all about them and love them.
   1. By this I am referring, not to category theory, but the various
      functions monads are required to support and their proper use,
all of which
      are higher-ordered (in that they accept or produce monads).
      2. I suspect learning the basics of category theory first, then the
      Haskell implementation  may have been easier.
      3. One then has to learn the do-block notation and what that means in
   terms of the underlying functions (because Haskell pedagogy currently
   focuses on this, and almost all tutorials are built around it)
   4. One also has to learn the "real" notation (because do-notation isn't
   always appropriate)
   5. Finally, One has to learn to "de-sugar" do-block notation while
   reading it, because many problems are simplified (or move from impossible
   to possible) with the de-sugared version.
   6. Maybe advanced users love do-notation and find it really beneficial,
   but most of the web-pages I see about do-blocks argue strongly against
   using do-notation except in the most extreme circumstances
      1. Which I found while trying to find articles on how to translate
      do-notation into real notation

Because of those reasons, I really wish I had never seen do-block notation.



Cheers!

Charles

On Thu, Mar 14, 2019 at 6:11 AM Dirk Ziegemeyer <dirk at ziegemeyer.de> wrote:

> Hi,
>
> from time to time I try to take advantage of Mercury’s insts to allow for
> more static error checking. Usually these tries end very fast because of
> these reasons:
> 1. The standard library predicates (e.g. list, map, foldl) don’t preserve
> subtype-insts. I have to write mode-polymorphic version of these predicates
> to go on. These mode-polymorphic predicate declarations are much longer and
> therefore harder to understand. (
> http://lists.mercurylang.org/archives/users/2015-March/007866.html)
> 2. User-defined predicate declarations become much longer, because I have
> to declare not only the type, but also subtype-insts.
> 3. With mode-polymorphic versions of predicates, the error messages might
> become very long and hard to read.
>
> I’m wondering if it might be possible to make insts more user-friendly.
>
> Maybe syntactic sugar for insts could make predicate declarations shorter.
> For example:
> Allow inst non_empty_list to be defined on type-level instead of
> inst-level. The compiler should notice that type non_empty_list is nothing
> else than type list which has an attached inst non_empty_list.
>
> Do you think this kind of syntactic sugar would be - at least
> theoretically - possible?
>
> Dirk
>
>
> _______________________________________________
> users mailing list
> users at lists.mercurylang.org
> https://lists.mercurylang.org/listinfo/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurylang.org/archives/users/attachments/20190314/820eb431/attachment-0001.html>


More information about the users mailing list