UNB/ CS/ David Bremner/ teaching/ cs4613/ lectures/ lecture16/ webapp.rkt
#lang web-server/insta

(define (page . lst)
  (response/xexpr
   `(html (body ,@(map
                   (lambda(x) (if (number? x)(~a x) x))
                   lst)))))

(define (get-num-core prompt)
  (lambda (k)
    (page
     `(form ([action ,k])
            ,prompt
            (input ([type "text"][name "n"]))))))

(define (get-num prompt)
  (string->number
   (extract-binding/single
    'n
    (request-bindings
     (send/suspend (get-num-core prompt))))))

(define (start initial-request)
  (page "The sum is: "
        (+ (get-num "First number: ")
           (get-num "Second number: "))))