Added some special cases to type signatures for pair accessors.

This commit is contained in:
Vincent St-Amour 2010-05-19 11:04:08 -04:00
parent eb95b35a12
commit f77e4eeb41

View File

@ -40,15 +40,20 @@
(->acc (list (-pair a b)) b (list -cdr)) (->acc (list (-pair a b)) b (list -cdr))
(->* (list (-lst a)) (-lst a))))] (->* (list (-lst a)) (-lst a))))]
;; these type signatures do not cover all valid uses of these pair accessors
[caar (-poly (a b c) [caar (-poly (a b c)
(cl->* [->acc (list (-pair (-pair a b) c)) a (list -car -car)] (cl->* [->acc (list (-pair (-pair a b) c)) a (list -car -car)]
[-> (-lst (-pair a b)) a]
[-> (-pair (-lst a) b) a]
[-> (-lst (-lst a)) a]))] [-> (-lst (-lst a)) a]))]
[cdar (-poly (a b c) [cdar (-poly (a b c)
(cl->* [->acc (list (-pair (-pair a b) c)) b (list -cdr -car)] (cl->* [->acc (list (-pair (-pair a b) c)) b (list -cdr -car)]
[-> (-lst (-pair a b)) b]
[-> (-pair (-lst a) b) (-lst a)]
[-> (-lst (-lst a)) (-lst a)]))] [-> (-lst (-lst a)) (-lst a)]))]
[cadr (-poly (a b c) [cadr (-poly (a b c)
(cl->* [->acc (list (-pair a (-pair b c))) b (list -car -cdr)] (cl->* [->acc (list (-pair a (-pair b c))) b (list -car -cdr)]
[-> (-lst a) a]))] [-> (-lst a) a]))]
[cddr (-poly (a b c) [cddr (-poly (a b c)
(cl->* [->acc (list (-pair a (-pair b c))) c (list -cdr -cdr)] (cl->* [->acc (list (-pair a (-pair b c))) c (list -cdr -cdr)]
[-> (-lst a) (-lst a)]))] [-> (-lst a) (-lst a)]))]