-- Let's test it:

testBranches :: Either String ()
testBranches =
    let t = N (P ([("",0)] := DECL :<: UID))
        e'= N (P ([("",1)] := DECL :<: enumU))
        p = N (P ([("",2)] := DECL :<: ARR (ENUMT (CONSE t e')) SET))
        typ = SET
        orig = branchesOpRun t e' p
        judge val = equal (typ :>: (val, orig)) (B0, 3)
    in opRunRunner branchesOp [CONSE t e', p] judge "branches not equal!"
testBranches :: Either String ()
testBranches =
    let t = N (P ([("",0)] := DECL :<: UID))
        e'= N (P ([("",1)] := DECL :<: enumU))
        p = N (P ([("",2)] := DECL :<: ARR (ENUMT (CONSE t e')) SET))
        typ = SET
        orig = branchesOpRun t e' p
        judge val = equal (typ :>: (val, orig)) (B0, 3)
    in opRunRunner branchesOp [CONSE t e', p] judge "branches not equal!"
testBranches =
    let t = N (P ([("",0)] := DECL :<: UID))
        e'= N (P ([("",1)] := DECL :<: enumU))
        p = N (P ([("",2)] := DECL :<: ARR (ENUMT (CONSE t e')) SET))
        typ = SET
        orig = branchesOpRun t e' p
        judge val = equal (typ :>: (val, orig)) (B0, 3)
    in opRunRunner branchesOp [CONSE t e', p] judge "branches not equal!"