GNU bug report logs -
#73431
Add `setf` support for `stream.el` in ELPA
Previous Next
Reported by: Okamsn <okamsn <at> protonmail.com>
Date: Mon, 23 Sep 2024 01:35:01 UTC
Severity: wishlist
Done: Stefan Monnier <monnier <at> iro.umontreal.ca>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
> +(cl-defstruct (stream (:constructor stream--make-stream)
> + (:predicate streamp)
> + :named)
> +
> + "A lazily evaluated sequence, compatible with the `seq' library's functions."
> +
> + (evaluated--internal
> + nil
> + :type boolean
> + :documentation "Whether the head and tail of the stream are accessible.
> +
> +This value is set to t via the function `stream--force' after it
> +calls the updater function.")
> +
> + (first--internal
> + nil
> + :type (or t null)
> + :documentation "The first element of the stream.")
> +
> + (rest--internal
> + nil
> + :type (or stream null)
> + :documentation "The rest of the stream, which is itself a stream.")
> +
> + (empty--internal
> + nil
> + :type boolean
> + :documentation "Whether the evaluated stream is empty.
> +
> +A stream is empty if the updater function returns nil when
> +`stream--force' evaluates the stream.")
> +
> + (updater--internal
> + nil
> + :type (or function null)
> + :documentation "Function that returns the head and tail of the stream when called.
Instead of funny field names, I recommend you use something like
`(:conc-name stream--)` so all the automatically-created accessors have
a "--" in their name, declaring them internal.
Also, I wonder: have you tried to stick closer to the original code,
with a structure like
(cl-defstruct (stream ...)
(evald nil :type boolean)
(data nil :type (or function list)))
Was it worse than what you have?
Stefan
PS: We could even be nasty and do things like:
(cl-defstruct (stream ...)
(data nil :type (or function list)))
(cl-defstruct (stream--unevald (:include stream)))
(cl-defstruct (stream--evald (:include stream)))
and then use (aref STREAM 0) to dynamically change the type from
`stream--unevald` to `stream--evald` to avoid storing the `evald` field.
😈
This bug report was last modified 264 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.