1
(: test (All (A) (-> A A (Rec Expr (Listof (U A Expr))) (Rec Expr (Listof (U A Expr))))))
(define (test new old expr)
(if (null? expr)
expr
(if (list? (car expr))
expr ; <- get error here
expr)))
Type Checker: type mismatch
expected: (Rec g161252 (Listof (U A g161252)))
given: (Pairof
(U (Rec g161259 (Listof (U A g161259))) (Pairof Any (Listof Any)))
(Listof (U A (Rec g161268 (Listof (U A g161268)))))) in: expr
的代碼返回完全相同expr
的輸入之一。
(define (test new old expr)
(if (and (not (null? expr)) (list? (car expr)))
expr ; <- also get the error
expr))
但
(define (test new old expr)
(if (and (list? (car expr)) (not (null? expr)))
expr ; <- this works fine
expr))
如果邏輯順序,然後正常工作。
那麼爲什麼類型檢查器會得到類型不匹配錯誤?
提供關於該功能的更多上下文可能會有所幫助,以便其他人可以更容易地理解該代碼。 –
這只是一個測試功能。您可以嘗試Racket IDE中的代碼。唯一的上下文是'#lang typed/racket' – qdwang