GHCの言語拡張のうち、デフォルトで有効になっているものの一覧ってどこにありまし...

GHCの言語拡張のうち、デフォルトで有効になっているものの一覧ってどこにありましたっけ。。。user guideのどこかにあったようななかったような。。。

Replies

GHCの言語拡張のうち、デフォルトで有効になっているものの一覧ってどこにありましたっけ。。。user guideのどこかにあったようななかったような。。。

答えになっているかわからないですが、色々調べた結果です。

https://www.stackage.org/haddock/lts-12.14/haskell-src-exts-1.20.3/src/Language.Haskell.Exts.Extension.html#ghcDefault

-- Not exported, just used locally in several places.
allLangDefault :: [KnownExtension]
allLangDefault = [MonomorphismRestriction, MonoPatBinds, ImplicitPrelude]

ghcDefault :: [Extension]
ghcDefault = map EnableExtension (NondecreasingIndentation:allLangDefault)


ghci

*Main> :show language
base language is: Haskell2010
with the following modifiers:
  -XNoDatatypeContexts
  -XNondecreasingIndentation


ghc

module Main where

import GHC
import GHC.Paths (libdir)
import MonadUtils (liftIO)
import EnumSet (toList)

main :: IO ()
main =
  runGhc (Just libdir) $ do
    flags <- getSessionDynFlags
    liftIO $ print $ toList $ extensionFlags flags

{- 実行結果
[ MonomorphismRestriction
, RelaxedPolyRec
, ForeignFunctionInterface
, ImplicitPrelude
, DoAndIfThenElse
, EmptyDataDecls
, PatternGuards
, NondecreasingIndentation
, TraditionalRecordSyntax
]
-}

ありがとうございます。
https://twitter.com/igrep/status/1056028202722721793 で気になったExtendedDefaultRulesについては載ってなさそうですね。。。 🤔

その拡張なら、 ghci では別途有効になるはずです。

https://github.com/ghc/ghc/blob/master/ghc/GHCi/UI.hs#L433

dflags <- getDynFlags
   let dflags' = (`xopt_set` LangExt.ExtendedDefaultRules)
               . (`xopt_unset` LangExt.MonomorphismRestriction)
               $ dflags
   GHC.setInteractiveDynFlags dflags'

なるほどGHCi限定かー!どおりでー!

wadoさんがまとめ済みですが、GHCiでの話はここみたいです。
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghci.html#type-defaulting-in-ghci

GHC実行時のフラグ一覧と言語拡張一覧は各々以下ですが、肝心の言語拡張の方は、一覧からはデフォルトの状態はわからないですね〜。
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/flags.html
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#options-language

面白そうなのでちょっと見てみました。 GHCのコードだと、たぶん、ここではないかと思います(GHCiは除いて。)
https://github.com/ghc/ghc/blob/ghc-8.6.1-release/compiler/main/DynFlags.hs#L2132:L2144