I know the code below is wrong because it sends TR into an infinite
loop. What is the recommended way to represent mynull (and its type)
without leaking its representation to a user of this library?

#lang typed/racket

(define mynull null)

(define-type MyListof (All (A) (Rec X (U mynull (Pair A X)))))

(: mynull? : (All (A) ((MyListof A) -> Boolean)))
(define (mynull? lst) (null? lst))

(: mycar : (All (A) ((MyListof A) -> A)))
(define (mycar lst)
  (if (mynull? lst)
      (error 'mycar "given list is empty")
      (car lst)))

(: mycdr : (All (A) ((MyListof A) -> (MyListof A))))
(define (mycdr lst)
  (if (mynull? lst)
      (error 'mycdr "given list is empty")
      (cdr lst)))
_________________________
  Racket Developers list:
  http://lists.racket-lang.org/dev

Reply via email to