   
#lang typed-scheme

(: f ((U Number #f) (cons Any Any) -> Number))
(define (f x y)
 (cond
   [(and (number? x) (number? (car y))) (+ x (car y))]
   [(number? (car y)) (+ (bool-to-0-or-1 x) (car y))]
   [(number? x) x]
   [else 0]))

(: bool-to-0-or-1 (Boolean -> Number))
(define (bool-to-0-or-1 b)
 (if b 1 0))