GHC реализует несколько вариантов языка Haskell, а также множество расширений. Их можно включать и отключать с помощью флагов командной строки или прагм LANGUAGE.
Некоторые расширения предоставляют доступ к базовым средствам, с помощью которых мы реализуем Haskell. Так вы можете работать с низкоуровневыми возможностями, если готовы писать непереносимый код на более примитивном уровне. Вам не придётся мириться с низкой производительностью из-за затрат на реализацию высокоуровневых возможностей Haskell — вы всегда можете писать код «под» ними. В крайнем случае можно написать весь критически важный по времени код на C, а затем просто связать его с Haskell!