Какие расширения Haskell (GHC) следует использовать или избегать?

несколько раз сталкивался с тем, что GHC говорил мне использовать расширение, только чтобы обнаружить, что при использовании этого расширения я сделал код намного сложнее, тогда как простой рефакторинг позволил бы мне придерживаться Haskell 98 (сейчас 2010) и имеют более простое решение.

С другой стороны, бывают случаи, когда GADT или Rank2Types (реже RankNTypes) требуют меньше работы и намного чище код.

Какие расширения, как правило, скрывают возможность улучшения дизайна, а какие в целом улучшают его? Если есть некоторые, которые делают и то, и другое, на что должен обратить внимание пользователь (убедиться, что это правда или нет для решения, которое он намеревается), прежде чем решить использовать это расширение?

(См. также Должен ли я использовать расширения GHC Haskell или нет? )

61
задан Community 23 May 2017 в 10:31
поделиться