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

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

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

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

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

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

  • Я понимаю, что UndecidableInstancesбезопасен, потому что, хотя это может привести к тому, что компилятор не завершит работу, пока код компилируется, он не будет иметь неожиданных побочных эффектов.

  • С другой стороны, OverlappingInstancesявно небезопасен, потому что мне очень легко случайно написать код, выдающий ошибки во время выполнения.

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

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

36
задан Chris Taylor 31 May 2012 в 09:21
поделиться