let < value, localContext1, typeGraph1 > ←
MakeValue[Exp, localContext, ribContext, typeGraph, typeIndex],
boundTypeIndex ←
ValueGetType[value],
< boundTypeNode, localContext2, typeGraph2 > ←
FetchType[typeGraph1, boundTypeIndex, localContext1, ribContext],
assert ←
Assert[IsEnumType[boundTypeNode], "type mismatch", BotchAction.quit],
< typeNode, localContext3, typeGraph3 > ←
FetchType[typeGraph2, typeIndex, localContext2, ribContext],
assert1 ←
Assert[PaintEqual[GetPaint[typeNode], GetPaint[boundTypeNode]], "type mismatch", BotchAction.quit],
assert2 ←
Assert[IsSimpleValue[value], "not a compile-time constant", BotchAction.quit]