Perhaps something like this?

;;;;;;;;;;;;;
#lang typed/racket/base

(provide mynull mycar mycdr)

(struct: MyNull ())
(define mynull (MyNull))

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

(: 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)))
;;;;;;;;;;;;;

where mynull is the singleton instance of the opaque structure type MyNull.
_________________________
  Racket Developers list:
  http://lists.racket-lang.org/dev

Reply via email to