all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Andrea Corallo <acorallo@gnu.org>
Cc: 73626@debbugs.gnu.org
Subject: bug#73626: 30.0.91; Type specifiers of functions
Date: Thu, 14 Nov 2024 09:33:27 +0200	[thread overview]
Message-ID: <86ed3el16g.fsf@gnu.org> (raw)
In-Reply-To: <yp1h68aoe0n.fsf@fencepost.gnu.org> (message from Andrea Corallo on Wed, 13 Nov 2024 19:27:52 -0500)

> From: Andrea Corallo <acorallo@gnu.org>
> Cc: 73626@debbugs.gnu.org
> Date: Wed, 13 Nov 2024 19:27:52 -0500
> 
> Okay this is what I'm working on.  I felt the need to add a more general
> '(elisp)Type Specifiers' node as this was never documented and I think
> deserves its own space.
> 
> I referenced it from '(emacs)Name Help' where I mentioned we report
> function type specifiers.  Also I could reference it from '(elisp)
> Declare Form' so that the concept of type specifier (there already
> mentioned) is explained.
> 
> There are some mentions of type specifiers in cl.texi which I guess I'll
> add some xref as well.
> 
> WDYT?

Thanks, some minor comments below.

> diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi
> index f15b4c5e89d..0f85ff0c832 100644
> --- a/doc/emacs/help.texi
> +++ b/doc/emacs/help.texi
> @@ -322,6 +322,13 @@ Name Help
>  yet further information is often reachable by clicking or typing
>  @key{RET} on emphasized parts of the text.
>  
> +The function type, if known, is expressed with a function type specifier
> +(@pxref{Type Specifiers,,,elisp, The Emacs Lisp Reference Manual}), it

It would be good to have "function type specifier" in @dfn here, and
also have a @cindex entry for that.

> -@var{type} is a type specifier in the form @w{@code{(function
> +@var{type} is a @ref{Type Specifier} in the form @w{@code{(function

"Type Specifiers", in plural.  More importantly, using @ref in such a
way is not a good idea in Texinfo, it looks good only in the HTML
format.  For other formats, it is better to use the wordier

  @var{type} is a @dfn{type specifier} (@pxref{Type Specifiers}) in
  the form...

> +@node Type Specifiers
> +@subsection Type Specifiers

Please add an index entry here

  @cindex type specifier

> +A type specifier is an expression that denotes a type. A type represents
                                                        ^^
Two spaces between sentences.

> +a set of possible values.  Type specifiers can be classified in
> +primitives and composites.

Since type specifiers are mostly (only?) used for functions, perhaps
the section should explicitly talk about "function type specifiers",
or at least mention "function" in several places in the text?

> +@subsubsection Primitive type specifiers.
> +Primitive types specifiers are the basic types (i.e. not composed by other

"i.e." needs a @: after it, since the period doesn't end a sentence.

> +Built-in primitive types (like @code{integer}, @code{float},
> +@code{string} etc) are listed in @xref{Type Hierarchy}.

@ref, not @xref.  The latter is only pertinent at the beginning of a
sentence, since it produces a capitalized "See".

> +@subsubsection Composite type specifiers.
> +Composite type specifiers allow the definition of complex types by
> +combining simpler types.

Instead of having @subsections here, I'd use a @table (with the
composite type specifiers being a nested @table inside that).  A
@table is easier to read and grasp, and also can save you typing,
since you can say

  @table @code

and avoid the need to use @code for each symbol.

> +@item @code{and}
> +
> +Similarly the @code{and} type specifier describes a type that satisfies
> +at all the given types.
   ^^
That "at" should be removed.

> +The @code{function} type specifier in the form @w{@code{(function
> +(ARG-1-TYPE ... ARG-N-TYPE) RETURN-TYPE)}} used to describe the argument

The symbols you have in UPPER-CASE should be actually in @var and in
lower-case, as we always do with meta-syntactic arguments (i.e., with
symbols that stand for something other than themselves literally).

> +types and return type of a function. Argument types can be interleaved
                                      ^^
Two spaces.

> +The @code{integer} type specifier is used to define a subset of integers
> +by specifying a range. This allows to precisely control which integers
                        ^^
Likewise.

> +are valid for a given type.
> +
> +The general form is:
> +@example
> +(integer lower-bound upper-bound)
> +@end example
> +Where @code{lower-bound} is the minimum integer value in the range and
> +@code{upper-bound} the maximum.  It is possible to use @code{*} to
> +indicate no lower or uper limit.
> +
> +The following represents all integers from -10 to 10.
> +@example
> +(integer -10 10)
> +@end example
> +
> +The following represents 10.
> +@example
> +(integer 10 10)
> +@end example
> +
> +The following represents all integers from negative infinity to 10.
> +@example
> +(integer * 10)
> +@end example

I wonder whether the description of the 'integer' type should be in
the "primitive types" part, since 'integer' is a primitive type, and
mentioned there?

A general note: I miss some higher-level background information here,
which would explain how these types are generated and how and for what
purposes they are used.  Such background doesn't have to be too
detailed or too technical, but it is important to provide the
rationale for this feature.

In addition, if there's a value or an advantage to have type
information about functions, this section should explain the
advantages and encourage Lisp programmers to use the relevant
facilities (AFAIU, the 'declare' form; is there anything else?) to
provide that information.





  reply	other threads:[~2024-11-14  7:33 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-04 12:25 bug#73626: 30.0.91; Type specifiers of functions Eli Zaretskii
2024-10-19  7:01 ` Eli Zaretskii
2024-10-23 22:29 ` Andrea Corallo
2024-10-24 15:47   ` Eli Zaretskii
2024-10-25  9:35     ` Andrea Corallo
2024-10-25 10:19       ` Eli Zaretskii
2024-11-09  9:13         ` Eli Zaretskii
2024-11-12 19:17           ` Andrea Corallo
2024-11-14  0:27             ` Andrea Corallo
2024-11-14  7:33               ` Eli Zaretskii [this message]
2024-11-19  9:55                 ` Andrea Corallo
2024-11-21 10:52                   ` Eli Zaretskii
2024-11-21 13:15                     ` Andrea Corallo
2024-11-21 13:48                       ` Eli Zaretskii
2024-11-21 14:57                         ` Andrea Corallo
2024-11-16  4:21               ` Richard Stallman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=86ed3el16g.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=73626@debbugs.gnu.org \
    --cc=acorallo@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.