Есть ли список расширений GHC, которые считаются «безопасными»?

Иногда фрагмент кода, который я хочу написать, не является законным без хотя бы одного языкового расширения. Это особенно верно при попытке реализовать идеи в исследовательских работах, которые, как правило, используют любую изящную, супер-расширенную версию GHC, которая была доступна на момент написания статьи, не давая понять, какие расширения действительно требуются.

В результате я часто получаю что-то подобное в верхней части моих файлов .hs:

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

Я не возражаю против этого, но часто я чувствую, что я делаю слепые жертвы, чтобы успокоить Великого Бога GHC. Он жалуется, что определенный фрагмент кода недопустим без языкового расширения X, поэтому я добавляю прагму для X. Затем он требует, чтобы я включил Y, поэтому я добавляю прагму для Y. К тому времени, когда это завершится, я включить три или четыре языковых расширения, которые я действительно не понимаю, и я понятия не имею, какие из них являются «безопасными».

Чтобы объяснить, что я имею в виду под «безопасным»:

I understand that UndecidableInstances is safe, because although it may cause the compiler to not terminate, as long as the code compiles it won't have unexpected side effects.

On the other hand, OverlappingInstances is clearly unsafe, because it makes it very easy for me to accidentally write code that gives runtime errors.

Итак, мой вопрос:

Is there a list of GHCextensions which are considered 'safe' and which are 'unsafe'?

Ответы на вопрос(1)

Ваш ответ на вопрос