#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