Ответ 1
Немного дальше на странице, которую вы указали:
TemplateHaskell - особенно опасен, поскольку он может вызывать побочные эффекты даже во время компиляции и может использоваться для доступа к абстрактным типам данных.
Очень легко сломать границы модулей с помощью TH.
Забота о побочных эффектах связана с тем, что TH позволяет запускать произвольные вычисления IO
во время компиляции, используя runIO
. Это поставило бы любую надежду на безопасность прямо из окна.
Разрыв границ модуля означает, что с помощью TH вы можете, например, создавать конструкторы данных, даже если модуль не экспортировал их.
См. этот репозиторий для многих примеров вещей, которые небезопасно разрешать в Safe Haskell, включая пример нарушение границ модуля.
Возможно, что Template Haskell можно было бы сделать безопасным, если бы эти функции были отключены, однако для TH это потребует значительных изменений.