UNB/ CS/ David Bremner/ teaching/ cs4613/ lectures/ lecture08/ exp1.rkt
#lang plait
(define-type BinOp
  [plus]
  [++]) ;; string concat

(define-type Exp
  [binE (operator : BinOp)
        (left : Exp)
        (right : Exp)]
  [numE (value : Number)]
  [strE (value : String)])

(binE (plus) (numE 3) (numE 4))  ;; OK
(binE (++) (strE "3") (strE "4")) ;; OK
(binE (plus) (numE 3) (strE "4")) ;; not OK