Existe uma lista de extensões do GHC que são consideradas "seguras"?

Ocasionalmente, um trecho de código que eu quero escrever não é legal sem pelo menos uma extensão de idioma. Isso é particularmente verdadeiro quando se tenta implementar ideias em trabalhos de pesquisa, que tendem a usar a versão superestendida do GHC disponível no momento em que o papel foi escrito, sem deixar claro quais extensões são realmente necessárias.

O resultado é que muitas vezes acabo com algo parecido com isso no topo dos meus arquivos .hs:

{-# LANGUAGE TypeFamilies
           , MultiParamTypeClasses
           , FunctionalDependencies
           , FlexibleContexts
           , FlexibleInstances
           , UndecidableInstances
           , OverlappingInstances #-}

Não me importo com isso, mas muitas vezes sinto que estou fazendo sacrifícios cegos para apaziguar o Grande Deus do GHC. Ele reclama que um certo trecho de código não é válido sem a extensão de linguagem X, então eu adiciono um pragma para X. Então ele exige que eu habilite Y, então eu adiciono um pragma para Y. No momento em que isso termina, eu permitir três ou quatro extensões de idioma que eu realmente não entendo, e não tenho idéia de quais são "seguras".

Para explicar o que quero dizer com 'seguro':

Eu entendi aquiloUndecidableInstances é seguro, porque embora possa fazer com que o compilador não termine, contanto que o código compile, ele não terá efeitos colaterais inesperados.

Por outro lado,OverlappingInstances é claramente inseguro, porque torna muito fácil escrever acidentalmente código que dá erros de tempo de execução.

Então minha pergunta é:

Existe uma lista de GHCextensions que são consideradas "seguras" e quais são "inseguras"?

questionAnswers(1)

yourAnswerToTheQuestion