#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