Am 08.03.2018 um 23:46 schrieb Stefano Troncaro:
@Urs
With your last update, the following syntax popped to mind:

    \version  "2.19.80" %Functional copy of your example #(define  rules
        `(strict
           (req payload
                (target ,symbol?))
           (opt accepted-without-type
                (accepted-arg ,fraction?)
                (ind ,number?  5)
                (msg ,string?  "No message given"))))

    %Accepts any argument, but provides a type-check and a default for
    msg #(define  rules2
        `(flexible
           (opt (msg ,string?  "No message given"))))


I'll think about it later today, just a few short comments for now:

I like it because:
1) It eliminates the need for the boolean argument to context-mod->props, and puts that information together with all the other rules, which makes them easier to read and parse (mentally) because all the information is in the same place. I know it's a minor thing but it's not much more typing and it feels cleaner to me. The other way you have a 'rules object' that does not contain the whole ruleset.

Very good point.

2) It eliminates unnecessary parens.

I'm not sure this is relevant. You don't need to put them around untyped options but you have to add another layer around everything.

What I liked about my implementation (as opposed to the first ideas) was that it's flat, a simple list of lists. But probably I'll consider this as weighing less than 1)

3) It eliminates the need to flag many arguments with opt.

I don't have a strong opinion on that on first sight.

4) Also, arguments that have default values feel optional to me, and here they are grouped together. With this I can at first glance know what arguments I need to give and what is optional.

What you're proposing is focused on the POV of the *caller* of the function (i.e. the document author), while my approach was focused on what the *code* needs to be present. As said I'll have to think more closely about it later today, but you may have a good point here too.


It may have defects I'm not seeing. What do you think? If you like it I can do the rework.

You may of course open a pull request. Maybe we'll discuss details but I have no objections so far.

Best
Urs

_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to