Thank you for your comment

Beau­tiful Racket / explainers

  1. (module divs br
      (require racket/contract)
      (provide
       (contract-out
        [int-div (integer? integer? . -> . integer?)]))
      (define (int-div num denom)
        (/ num denom))

      (with-handlers ([exn:fail? (λ (e) 'inner-breach)])
        (displayln (int-div 42 2.5))))

    (require (submod "." divs))
    (with-handlers ([exn:fail? (λ (e) 'outer-breach)])
      (displayln (int-div 42 2.5)))
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    (module divs br
      (require racket/contract)
      (provide
       (contract-out
        [int-div (integer? integer? . -> . integer?)]))
      (define (int-div num denom)
        (/ num denom))
    
      (with-handlers ([exn:fail? (λ (e) 'inner-breach)])
        (displayln (int-div 42 2.5))))
    
    (require (submod "." divs))
    (with-handlers ([exn:fail? (λ (e) 'outer-breach)])
      (displayln (int-div 42 2.5)))
    
    copy to clipboard
    16.8 ; no contract invoked from within the module
    'outer-breach
    1
    2
    16.8 ; no contract invoked from within the module
    'outer-breach
    
    copy to clipboard
    (module divs br
      (require racket/contract)
      (provide
       (contract-out
        [/ (integer? integer? . -> . integer?)]))

      (with-handlers ([exn:fail? (λ (e) 'inner-breach)])
        (displayln (/ 42 2.5))))

    (require (submod "." divs))
    (with-handlers ([exn:fail? (λ (e) 'outer-breach)])
      (displayln (/ 42 2.5)))
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    (module divs br
      (require racket/contract)
      (provide
       (contract-out
        [/ (integer? integer? . -> . integer?)]))
    
      (with-handlers ([exn:fail? (λ (e) 'inner-breach)])
        (displayln (/ 42 2.5))))
    
    (require (submod "." divs))
    (with-handlers ([exn:fail? (λ (e) 'outer-breach)])
      (displayln (/ 42 2.5)))
    
    copy to clipboard
    16.8 ; no contract invoked from within the module
    'outer-breach
    1
    2
    16.8 ; no contract invoked from within the module
    'outer-breach
    
    copy to clipboard
  2. (module divs br
      (require racket/contract)
      (provide int-div)
      (define/contract (int-div num denom)
        (integer? integer? . -> . integer?)
        (/ num denom))

      (with-handlers ([exn:fail? (λ (e) 'inner-breach)])
        (displayln (int-div 42 2.5))))

    (require (submod "." divs))
    (with-handlers ([exn:fail? (λ (e) 'outer-breach)])
      (displayln (int-div 42 2.5)))
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    (module divs br
      (require racket/contract)
      (provide int-div)
      (define/contract (int-div num denom)
        (integer? integer? . -> . integer?)
        (/ num denom))
    
      (with-handlers ([exn:fail? (λ (e) 'inner-breach)])
        (displayln (int-div 42 2.5))))
    
    (require (submod "." divs))
    (with-handlers ([exn:fail? (λ (e) 'outer-breach)])
      (displayln (int-div 42 2.5)))
    
    copy to clipboard
    'inner-breach
    'outer-breach
    1
    2
    'inner-breach
    'outer-breach
    
    copy to clipboard
  1. (define (our-div num denom)
      (unless (and (number? denom) (not (zero? denom)))
        (raise-argument-error
         'our-div
         "nonzero number for denom"
         denom))
      (/ num denom))
    (our-div 42 0)
    1
    2
    3
    4
    5
    6
    7
    8
    (define (our-div num denom)
      (unless (and (number? denom) (not (zero? denom)))
        (raise-argument-error
         'our-div
         "nonzero number for denom"
         denom))
      (/ num denom))
    (our-div 42 0)
    
    copy to clipboard
    our-div: contract violation
      expected: nonzero number for denom
      given: 0
    1
    2
    3
    our-div: contract violation
      expected: nonzero number for denom
      given: 0
    
    copy to clipboard
← prev next →