#lang racket/load 

(module a racket/base
  (require racket/contract (only-in racket/list first second rest empty?) (prefix-in old: (only-in racket/list argmax)))
  
  (define (argmax f lov)
    (old:argmax f lov))
  
  (provide/contract 
    [argmax (-> (-> any/c real?) (and/c pair? list?) any/c)]))

(module b racket/base
  (require 'a)
  (require racket/contract/private/blame)
  (with-handlers ([exn:fail:contract:blame? void])
    (printf "***0: ~s\n" (argmax car '())))
  (with-handlers ([exn:fail:contract:blame? void])
    (printf "***1: ~s\n" (argmax car '())))
  (with-handlers ([exn:fail:contract:blame? void])
    (printf "***2: ~s\n" (argmax car '((apples 3)))))
  (printf "3: ~s\n" (argmax car '((3 apples) (3 oranges)))))

(require 'b)
