[GHC] #9642: LANGUAGE pragma synonyms

GHC ghc-devs at haskell.org
Sun Sep 28 10:49:10 UTC 2014


#9642: LANGUAGE pragma synonyms
-------------------------------------+-------------------------------------
       Reporter:  dreixel            |                   Owner:
           Type:  feature request    |                  Status:  new
       Priority:  normal             |               Milestone:
      Component:  Compiler           |                 Version:  7.9
       Keywords:                     |        Operating System:
   Architecture:  Unknown/Multiple   |  Unknown/Multiple
     Difficulty:  Unknown            |         Type of failure:
     Blocked By:                     |  None/Unknown
Related Tickets:                     |               Test Case:
                                     |                Blocking:
                                     |  Differential Revisions:
-------------------------------------+-------------------------------------
 Here are the first 20 lines of a typical Haskell file of mine:

 {{{
 {-# LANGUAGE EmptyDataDecls                    #-}
 {-# LANGUAGE FlexibleContexts                  #-}
 {-# LANGUAGE FlexibleInstances                 #-}
 {-# LANGUAGE LiberalTypeSynonyms               #-}
 {-# LANGUAGE ScopedTypeVariables               #-}
 {-# LANGUAGE RankNTypes                        #-}
 {-# LANGUAGE StandaloneDeriving                #-}
 {-# LANGUAGE AutoDeriveTypeable                #-}
 {-# LANGUAGE DeriveDataTypeable                #-}
 {-# LANGUAGE DeriveGeneric                     #-}
 {-# LANGUAGE DefaultSignatures                 #-}
 {-# LANGUAGE OverlappingInstances              #-}
 {-# LANGUAGE UndecidableInstances              #-}
 {-# LANGUAGE MultiParamTypeClasses             #-}
 {-# LANGUAGE TypeOperators                     #-}
 {-# LANGUAGE TypeFamilies                      #-}
 {-# LANGUAGE GADTs                             #-}
 {-# LANGUAGE DataKinds                         #-}
 {-# LANGUAGE PolyKinds                         #-}
 {-# LANGUAGE ConstraintKinds                   #-}
 }}}

 Over a couple of modules in a small package, I find myself copy-pasting
 these 20 lines, as either I will use these extensions, or they won't
 really cause any harm to the code I'm writing.

 As a way to simplify this, and reduce code duplication, I propose
 introducing LANGUAGE pragma synonyms:
 {{{
 {-# LANGUAGE PedrosHaskell = EmptyDataDecls, FlexibleContexts,
 FlexibleInstances
                            , LiberalTypeSynonyms, ScopedTypeVariables
                            , RankNTypes, StandaloneDeriving,
 AutoDeriveTypeable
                            , DeriveDataTypeable, DeriveGeneric,
 DefaultSignatures
                            , OverlappingInstances, UndecidableInstances
                            , MultiParamTypeClasses, TypeOperators,
 TypeFamilies
                            , GADTs, DataKinds, PolyKinds, ConstraintKinds
 #-}
 }}}

 After writing this, in that same module or any module that imports it, I
 could just write:
 {{{
 {-# LANGUAGE PedrosHaskell #-}
 }}}
 And all the pragmas above would be enabled.

 Besides making my life easier, I suspect this will also help increase
 modularity of certain packages. For example, packages could define a
 package-specific language pragma that should be enabled in order to use
 that package. Then, if the package maintainer upgrades one datatype to
 become a GADT, the pragma would be updated to include `GADTs`, and user
 code (that could now be requiring that pragma) would automatically enable
 `GADTs` too.

 Furthermore, it can also make the language standardisation process
 simpler. After all,

 {{{
 {-# LANGUAGE Haskell2010 = PatternGuards, NoNPlusKPatterns, RelaxedPolyRec
                          , EmptyDataDecls, ForeignFunctionInterface #-}
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9642>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list