SRFI 197: Threading Macros Arthur A. Gleckler (09 Jun 2020 03:41 UTC)
First comments Marc Nieper-Wißkirchen (09 Jun 2020 06:48 UTC)
Re: First comments Linus Björnstam (09 Jun 2020 07:27 UTC)
Re: First comments Marc Nieper-Wißkirchen (09 Jun 2020 08:30 UTC)
Re: First comments Adam Nelson (09 Jun 2020 13:25 UTC)
Re: First comments Marc Nieper-Wißkirchen (09 Jun 2020 14:06 UTC)
Re: First comments Lassi Kortela (09 Jun 2020 14:12 UTC)
Re: First comments Marc Nieper-Wißkirchen (09 Jun 2020 15:28 UTC)
Re: First comments Marc Nieper-Wißkirchen (09 Jun 2020 16:05 UTC)
Re: First comments Adam Nelson (09 Jun 2020 16:15 UTC)
Re: First comments Marc Nieper-Wißkirchen (09 Jun 2020 16:22 UTC)
Re: First comments Arne Babenhauserheide (09 Jun 2020 17:03 UTC)
Re: First comments Adam Nelson (09 Jun 2020 17:16 UTC)
Re: First comments Marc Nieper-Wißkirchen (09 Jun 2020 17:22 UTC)
Re: First comments Lassi Kortela (09 Jun 2020 17:31 UTC)
Re: First comments Marc Nieper-Wißkirchen (09 Jun 2020 17:40 UTC)
Re: First comments Arne Babenhauserheide (09 Jun 2020 22:19 UTC)
Re: First comments Marc Nieper-Wißkirchen (10 Jun 2020 06:16 UTC)
Re: First comments Linus Björnstam (10 Jun 2020 07:17 UTC)
Re: First comments Marc Nieper-Wißkirchen (10 Jun 2020 07:38 UTC)
Re: First comments Linus Björnstam (10 Jun 2020 08:21 UTC)
Re: First comments Marc Nieper-Wißkirchen (10 Jun 2020 08:42 UTC)
Re: First comments Linus Björnstam (15 Jun 2020 19:50 UTC)
Re: First comments Marc Nieper-Wißkirchen (15 Jun 2020 20:09 UTC)
Re: First comments Linus Björnstam (16 Jun 2020 11:39 UTC)
Re: First comments Arne Babenhauserheide (10 Jun 2020 07:53 UTC)
Re: First comments Marc Nieper-Wißkirchen (10 Jun 2020 08:04 UTC)
Re: First comments Marc Nieper-Wißkirchen (09 Jun 2020 17:44 UTC)
Re: First comments Adam Nelson (09 Jun 2020 17:46 UTC)
Re: First comments Marc Nieper-Wißkirchen (09 Jun 2020 17:49 UTC)
Re: First comments Arvydas Silanskas (09 Jun 2020 07:40 UTC)
Named procedure; RE: SRFI 197: Threading Macros Arne Babenhauserheide (09 Jun 2020 13:40 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Adam Nelson (09 Jun 2020 13:48 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Marc Nieper-Wißkirchen (09 Jun 2020 14:09 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros hga@xxxxxx (09 Jun 2020 14:16 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Lassi Kortela (09 Jun 2020 14:42 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Marc Nieper-Wißkirchen (09 Jun 2020 14:48 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros hga@xxxxxx (09 Jun 2020 15:10 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Marc Nieper-Wißkirchen (09 Jun 2020 15:25 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Arne Babenhauserheide (09 Jun 2020 15:47 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Marc Nieper-Wißkirchen (09 Jun 2020 15:58 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Adam Nelson (09 Jun 2020 16:21 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Marc Nieper-Wißkirchen (09 Jun 2020 16:46 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Adam Nelson (09 Jun 2020 17:13 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Marc Nieper-Wißkirchen (09 Jun 2020 17:35 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros John Cowan (11 Jun 2020 00:59 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros hga@xxxxxx (09 Jun 2020 16:58 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Lassi Kortela (09 Jun 2020 17:00 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Arne Babenhauserheide (09 Jun 2020 17:00 UTC)
Re: Named procedure; RE: SRFI 197: Threading Macros Marc Nieper-Wißkirchen (09 Jun 2020 15:17 UTC)
Usecase: chaining operations after "optionals" Arne Babenhauserheide (09 Jun 2020 17:18 UTC)
Re: Usecase: chaining operations after "optionals" Adam Nelson (09 Jun 2020 17:24 UTC)
Re: Usecase: chaining operations after "optionals" Marc Nieper-Wißkirchen (09 Jun 2020 17:48 UTC)
Re: Usecase: chaining operations after "optionals" Adam Nelson (09 Jun 2020 17:55 UTC)
Re: Usecase: chaining operations after "optionals" Marc Nieper-Wißkirchen (09 Jun 2020 19:11 UTC)
Re: Usecase: chaining operations after "optionals" Arne Babenhauserheide (09 Jun 2020 22:08 UTC)
Re: Usecase: chaining operations after "optionals" Marc Nieper-Wißkirchen (10 Jun 2020 06:11 UTC)
Re: Usecase: chaining operations after "optionals" Arne Babenhauserheide (10 Jun 2020 08:03 UTC)
Re: Usecase: chaining operations after "optionals" Marc Nieper-Wißkirchen (10 Jun 2020 08:10 UTC)
Association list utilities Lassi Kortela (10 Jun 2020 08:24 UTC)
Re: Association list utilities Marc Nieper-Wißkirchen (10 Jun 2020 08:30 UTC)
Re: Association list utilities Lassi Kortela (10 Jun 2020 08:49 UTC)
Re: Association list utilities Marc Nieper-Wißkirchen (10 Jun 2020 09:29 UTC)
Re: Association list utilities Lassi Kortela (10 Jun 2020 09:59 UTC)
Re: Association list utilities Marc Nieper-Wißkirchen (10 Jun 2020 10:09 UTC)
Re: Association list utilities Lassi Kortela (10 Jun 2020 10:37 UTC)
Re: Association list utilities Arne Babenhauserheide (10 Jun 2020 10:33 UTC)
Re: Usecase: chaining operations after "optionals" Arne Babenhauserheide (10 Jun 2020 09:16 UTC)
Re: Usecase: chaining operations after "optionals" Marc Nieper-Wißkirchen (10 Jun 2020 09:19 UTC)
Re: Usecase: chaining operations after "optionals" Lassi Kortela (10 Jun 2020 09:29 UTC)
Re: Usecase: chaining operations after "optionals" Marc Nieper-Wißkirchen (10 Jun 2020 09:42 UTC)
More on association lists (and other key-value collections) Lassi Kortela (10 Jun 2020 10:16 UTC)
Re: More on association lists (and other key-value collections) Marc Nieper-Wißkirchen (10 Jun 2020 10:42 UTC)
Re: More on association lists (and other key-value collections) Arne Babenhauserheide (11 Jun 2020 00:41 UTC)
Re: More on association lists (and other key-value collections) Marc Nieper-Wißkirchen (11 Jun 2020 10:07 UTC)
Re: Usecase: chaining operations after "optionals" Arne Babenhauserheide (10 Jun 2020 10:28 UTC)
Re: Usecase: chaining operations after "optionals" Marc Nieper-Wißkirchen (10 Jun 2020 10:32 UTC)

Re: Named procedure; RE: SRFI 197: Threading Macros Marc Nieper-Wißkirchen 09 Jun 2020 17:35 UTC

Am Di., 9. Juni 2020 um 19:13 Uhr schrieb Adam Nelson <xxxxxx@nels.onl>:

> > (What do you mean by "difficult to use in a dynamically-typed
> > language"? That is an orthogonal concept, isn't it?)
> Yes, this was more of a concern about SRFI 165 and similar attempts to
> bring monads into dynamically-typed languages, which usually result in
> code that is difficult to follow because of the lack of type
> annotations. It probably wasn't relevant to bring into this conversation.

The lack of type annotations is again orthogonal to the concept of
monads, I'd say. (Moreover, I'd add that you cannot really "bring"
monads into a language. They are always there as soon as some patterns
appear.)

When code is difficult to follow "because of the lack of type
annotations", this is mainly a problem of documentation. Even in
Haskell, code can become hard to follow when type annotations are not
given but to be inferred by the HM system.

Dynamically-typed languages even have some advantages due to their
flexibility. A static type system like, say, Haskell's just cannot
express any type one can think of. So at some point, one may need
explaining in words anyway.

But see SRFI 41 for a specification that uses type annotations to
document Scheme code.

The higher-order procedure of SRFI 1 could also be nicely (partly)
documented through type annotations. Note that this and the previous
example has nothing to do with monads (at least not obviously as lists
and promises and streams each form monads, of course).

> > Longer yes; the `let*' may or may not be more confusing (depending on
> > whether you know `and-let*' or not); but the explicit use of `cut'
> > would definitely make it more, err, explicit and, thus, easier to
> > understand.
> True, but it changes the tipping point at which `->` expressions become
> easier to read than equivalent plain expressions. Using the `cut`
> approach on chains of 3 or fewer calls doesn't accomplish much beyond
> adding noise.
> > (let* ((<- xs)
> >          (<- (map (lambda (x) (+ x 1)) <-)
> >          (<- (filter odd? <-)
> >          (<- (fold * 1 <-))
> >    <-)
> This is an interesting expression, and it does kind of communicate that
> chaining is taking place. It also establishes a good baseline: threading
> macros should be at least terser than this kind of `let*` expression, or
> else they serve no purpose. I agree that unifying `let*` and `and-let*`
> syntax would be helpful, but that should be a different SRFI, and
> probably should not include the `cut` syntax.

Would you want to create such a SRFI as well?

> > And the fact, that `->' maps in syntax and semantics so easily to
> > `let*' lets us explain `->' in Scheme terms.
> I should consider using this as a way of explaining these macros in my
> next draft.

You could use `let*-values' as the base for an mv version of your
threading construct. `let*-values' is in the core and should be
handled efficiently by implementations, so every syntax/semantics you
can reduce to it easily should be efficient.