bug#46014: (define (thunk) (lambda (x) x)) should be a compile error?

Stefan Israelsson Tampe <[email protected]>
Newsgroups gmane.lisp.guile.bugs
Message-ID <CAGua6m1v-yti0z-8MxAC2gPDSkrmydx_EckRjeLMK+bCiKR0bQ@mail.gmail.com>
I will note that paying attention to those warnings is super heolpful in
programming in guile. I miss these warnings
alot when doing python programming.In a sense with these warnings you get
close to static typechecking programming
languages and scheme/guile is really a nice mix of dynamic and static typing

On Thu, Jan 21, 2021 at 2:58 PM Ricardo Wurmus <[email protected]> wrote:

>
> Hi,
>
> > Consider this bit of simple code:
> >
> > #+BEGIN_SRC scheme
> >
> > (define (thunk)
> >    (lambda (x)
> >      x))
> >
> > (thunk) ;; works ok, I guess.
> > (thunk "hello world!\n")  ;; runtime error
> >
> > ;;; <stdin>:1074:0: warning: possibly wrong number of arguments to
> `thunk'
> > ice-9/boot-9.scm:1669:16: In procedure raise-exception:
> > Wrong number of arguments to #<procedure thunk ()>
> >
> > Entering a new prompt.  Type `,bt' for a backtrace or `,q' to continue.
> > #+END_SRC
> >
> > Guile will compile this program seemingly with no error.  Guile will
> > correctly report at runtime that procedure '(thunk "hello world!\n")'
> > takes no arguments, but it's lambda accepts 1 argument.  Would it be
> > possible to report this error at compile time?  Would that be
> > advantageous?
>
> This is not a bug.  What you call “thunk” here is a procedure that
> returns a procedure.  That’s very common and is often done to delay
> evaluation.
>
> It is in fact an error to call the procedure “thunk” with an argument.
> It doesn’t matter that it happens to return a procedure that *can* take
> an argument.  The procedure it returns is just like any other value,
> though, and isn’t inspected any further.
>
> That said, it is not true that Guile will compile this without a
> complaint.  I dumped your code snippet in a file foo.scm and
> compiled it:
>
> --8<---------------cut here---------------start------------->8---
> guild compile foo.scm
> foo.scm:6:0: warning: wrong number of arguments to `thunk'
> wrote
> `/home/rekado/.cache/guile/ccache/3.0-LE-8-4.4/home/rekado/dev/gx/gwl/foo.scm.go'
> --8<---------------cut here---------------end--------------->8---
>
> Isn’t that exactly what you’re asking for?
>
> --
> Ricardo
>
>
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.