Used GADT to ensure that load / store / alloca are well typed and that
a block have one an only one terminator at its end.