ну, в АТД, наверно, разница не очень заметна, кроме проверки ошибок и исчерпания, но в Хаскеле, например, есть элементы зависимых типов в синтаксисе case-of, когда отдельные ветки могут нести больше информации об оригинальном типе, чем известно снаружи
Вот у меня реальный пример возможностей динамического PM — преобразование в Ror.
ror = rule(
alt(
BitOr(Shl(X, i32(N)), Shr(X, i32(M))),
BitOr(Shr(X, i32(M)), Shl(X, i32(N))),
),
guard(lambda e: e.M == 32 - e.N),
to(lambda e: Ror(e.X, i32(32 - e.N)))
)