[m-users.] My experiences with inst declarations and making them more user-friendly
Richard O'Keefe
raoknz at gmail.com
Fri Mar 15 01:32:39 AEDT 2019
Why would you ever look for articles on how to translate Haskell's "do"
notation?
That's explained explicitly and clearly in section 3.14 of the report.
https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-470003.14
Once you understand ">>=" ">>" and "fail" you realise there's really no
other
way it could be done.
Although I've always found "do" as such to be pretty easy to read, when it
comes
to *writing* code, I prefer explicit use of >>= and >>, because it's
somehow easier
to think "algebraically" in plain Haskell.
On Fri, 15 Mar 2019 at 02:55, Charles Shuller <charles.shuller at gmail.com>
wrote:
> 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
>>
> _______________________________________________
> 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/20190315/67e8ad5d/attachment.html>
More information about the users
mailing list