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