Greetings,

I am new to using the type system, so this is probably a mistake on my part.
When passing continuations around I get compiler warnings with the
`-strict-types` flag. Here is a MWE:

```
; test.scm
(import (scheme base))

(: send-message (continuation -> noreturn))
(define (send-message k) (k "Hello world!"))

(display (call/cc (lambda (k) (send-message k))))
(newline)
```

When compiling:

```
% csc -strict-types test.scm

Warning: Invalid procedure
  In file `test.scm:4',
  In procedure `send-message',
  In procedure call:

    (k "Hello world!")

  Variable `k14' is not a procedure.

  It has this type:

    (struct continuation)
```

The program works as expected, i.e., it prints "Hello world!" but the warning
seems unwarranted. For truly unexpected behaviour, replace the definition of
`send-message` with:

```
(define (send-message k) (k (procedure? k)))
```

Then the program prints #f or #t depending on whether `-strict-types` is used or
not, respectively.

I am using this version of csc (congrats on the CHICKEN 6 release, by the way):

```
% csc -version
CHICKEN
(c)2000-2007 Felix L. Winkelmann, (c)2008 The CHICKEN Team
Version 6.0.0rc3 ((HEAD detached at 6.0.0rc3)) (rev 0e61d660)
linux-unix-gnu-x86-64 [ 64bit dload ptables ]
```

What am I missing? Shouldn't the continuation type be a subtype of the procedure
type?

Cheers,
Hernán

Reply via email to