racket/typed-racket

internal error type-checking a dot type program

Open

#509 opened on Mar 13, 2017

 (0 comments) (0 reactions) (0 assignees)Racket (106 forks)github user discovery
good first issue

Repository metrics

Stars
 (576 stars)
PR merge metrics
 (Avg merge 11d 14h) (1 merged PR in 30d)

Description

What version of Racket are you using?

6.8.0.2--2017-02-10

What program did you run?

#lang typed/racket

(define-type Filter
  (All (a b ...) (-> (-> a b ... b Any) (Listof a) (Listof b) ... (Listof a))))

(: filter* Filter)
(define (filter* p? l)
  (cond
    [(andmap empty? l) '[]]
    [else (define fst ({inst map a b ...} first l))
          (define rst (apply filter* p? ({inst map a b ...} rest l)))
          (if (apply p? fst) (cons fst rst) rst)]))

(filter* (lambda ({x : Integer}) (> x 1)) '(0 1 2))

What should have happened?

type error

If you got an error message, please include it here.

plt/racket/share/pkgs/typed-racket-lib/typed-racket/utils/tc-utils.rkt:271:0: Internal Typechecker Error: Got non-dcons: #(struct:dcon-dotted () #(struct:c Nothing b) b) #(struct:dcon-exact () #(struct:c Nothing Any)) while typechecking: (#%app apply filter* p? (#%app (#%expression map) rest l)) originally: (apply filter* p? ((inst map a b ...) rest l))

Contributor guide