Commit 95dfdceb authored by Ryan Scott's avatar Ryan Scott

Remove 'deriving Typeable' statements

Summary:
Deriving `Typeable` has been a no-op since GHC 7.10, and now that we
require 7.10+ to build GHC, we can remove all the redundant `deriving Typeable`
statements in GHC.

Test Plan: ./validate

Reviewers: goldfire, austin, hvr, bgamari

Reviewed By: austin, hvr, bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2260
parent 9d06ef1a
......@@ -2,8 +2,6 @@
-- (c) The University of Glasgow
--
{-# LANGUAGE DeriveDataTypeable #-}
module Avail (
Avails,
AvailInfo(..),
......
......@@ -235,7 +235,7 @@ unSwap IsSwapped f a b = f b a
-}
data FunctionOrData = IsFunction | IsData
deriving (Eq, Ord, Data, Typeable)
deriving (Eq, Ord, Data)
instance Outputable FunctionOrData where
ppr IsFunction = text "(function)"
......@@ -271,7 +271,7 @@ data StringLiteral = StringLiteral
{ sl_st :: SourceText, -- literal raw source.
-- See not [Literal source text]
sl_fs :: FastString -- literal string value
} deriving (Data, Typeable)
} deriving Data
instance Eq StringLiteral where
(StringLiteral _ a) == (StringLiteral _ b) = a == b
......@@ -281,7 +281,7 @@ data WarningTxt = WarningTxt (Located SourceText)
[Located StringLiteral]
| DeprecatedTxt (Located SourceText)
[Located StringLiteral]
deriving (Eq, Data, Typeable)
deriving (Eq, Data)
instance Outputable WarningTxt where
ppr (WarningTxt _ ws)
......@@ -314,7 +314,7 @@ pprRuleName rn = doubleQuotes (ftext rn)
------------------------
data Fixity = Fixity SourceText Int FixityDirection
-- Note [Pragma source text]
deriving (Data, Typeable)
deriving Data
instance Outputable Fixity where
ppr (Fixity _ prec dir) = hcat [ppr dir, space, int prec]
......@@ -324,7 +324,7 @@ instance Eq Fixity where -- Used to determine if two fixities conflict
------------------------
data FixityDirection = InfixL | InfixR | InfixN
deriving (Eq, Data, Typeable)
deriving (Eq, Data)
instance Outputable FixityDirection where
ppr InfixL = text "infixl"
......@@ -405,7 +405,7 @@ instance Outputable TopLevelFlag where
data Boxity
= Boxed
| Unboxed
deriving( Eq, Data, Typeable )
deriving( Eq, Data )
isBoxed :: Boxity -> Bool
isBoxed Boxed = True
......@@ -425,7 +425,7 @@ instance Outputable Boxity where
data RecFlag = Recursive
| NonRecursive
deriving( Eq, Data, Typeable )
deriving( Eq, Data )
isRec :: RecFlag -> Bool
isRec Recursive = True
......@@ -453,7 +453,7 @@ instance Outputable RecFlag where
data Origin = FromSource
| Generated
deriving( Eq, Data, Typeable )
deriving( Eq, Data )
isGenerated :: Origin -> Bool
isGenerated Generated = True
......@@ -486,7 +486,7 @@ instance Outputable Origin where
data OverlapFlag = OverlapFlag
{ overlapMode :: OverlapMode
, isSafeOverlap :: Bool
} deriving (Eq, Data, Typeable)
} deriving (Eq, Data)
setOverlapModeMaybe :: OverlapFlag -> Maybe OverlapMode -> OverlapFlag
setOverlapModeMaybe f Nothing = f
......@@ -568,7 +568,7 @@ data OverlapMode -- See Note [Rules for instance lookup] in InstEnv
-- instantiating 'b' would change which instance
-- was chosen. See also note [Incoherent instances] in InstEnv
deriving (Eq, Data, Typeable)
deriving (Eq, Data)
instance Outputable OverlapFlag where
......@@ -597,7 +597,7 @@ data TupleSort
= BoxedTuple
| UnboxedTuple
| ConstraintTuple
deriving( Eq, Data, Typeable )
deriving( Eq, Data )
tupleSortBoxity :: TupleSort -> Boxity
tupleSortBoxity BoxedTuple = Boxed
......@@ -903,12 +903,12 @@ data Activation = NeverActive
-- Active only *strictly before* this phase
| ActiveAfter SourceText PhaseNum
-- Active in this phase and later
deriving( Eq, Data, Typeable )
deriving( Eq, Data )
-- Eq used in comparing rules in HsDecls
data RuleMatchInfo = ConLike -- See Note [CONLIKE pragma]
| FunLike
deriving( Eq, Data, Typeable, Show )
deriving( Eq, Data, Show )
-- Show needed for Lexer.x
data InlinePragma -- Note [InlinePragma]
......@@ -926,7 +926,7 @@ data InlinePragma -- Note [InlinePragma]
, inl_act :: Activation -- Says during which phases inlining is allowed
, inl_rule :: RuleMatchInfo -- Should the function be treated like a constructor?
} deriving( Eq, Data, Typeable )
} deriving( Eq, Data )
data InlineSpec -- What the user's INLINE pragma looked like
= Inline
......@@ -934,7 +934,7 @@ data InlineSpec -- What the user's INLINE pragma looked like
| NoInline
| EmptyInlineSpec -- Used in a place-holder InlinePragma in SpecPrag or IdInfo,
-- where there isn't any real inline pragma at all
deriving( Eq, Data, Typeable, Show )
deriving( Eq, Data, Show )
-- Show needed for Lexer.x
{-
......@@ -1151,7 +1151,7 @@ data FractionalLit
= FL { fl_text :: String -- How the value was written in the source
, fl_value :: Rational -- Numeric value of the literal
}
deriving (Data, Typeable, Show)
deriving (Data, Show)
-- The Show instance is required for the derived Lexer.x:Token instance when DEBUG is on
negateFractionalLit :: FractionalLit -> FractionalLit
......
......@@ -5,7 +5,7 @@
\section[ConLike]{@ConLike@: Constructor-like things}
-}
{-# LANGUAGE CPP, DeriveDataTypeable #-}
{-# LANGUAGE CPP #-}
module ConLike (
ConLike(..)
......@@ -37,7 +37,6 @@ import Var
import Type (mkTyConApp)
import qualified Data.Data as Data
import qualified Data.Typeable
{-
************************************************************************
......@@ -50,7 +49,6 @@ import qualified Data.Typeable
-- | A constructor-like thing
data ConLike = RealDataCon DataCon
| PatSynCon PatSyn
deriving Data.Typeable.Typeable
{-
************************************************************************
......
......@@ -80,7 +80,6 @@ import Binary
import UniqFM
import qualified Data.Data as Data
import qualified Data.Typeable
import Data.Char
import Data.Word
import Data.List( mapAccumL, find )
......@@ -415,7 +414,6 @@ data DataCon
dcPromoted :: TyCon -- The promoted TyCon
-- See Note [Promoted data constructors] in TyCon
}
deriving Data.Typeable.Typeable
{- Note [TyBinders in DataCons]
......@@ -510,7 +508,7 @@ data HsSrcBang =
HsSrcBang (Maybe SourceText) -- Note [Pragma source text] in BasicTypes
SrcUnpackedness
SrcStrictness
deriving (Data.Data, Data.Typeable)
deriving Data.Data
-- | Bangs of data constructor arguments as generated by the compiler
-- after consulting HsSrcBang, flags, etc.
......@@ -520,19 +518,19 @@ data HsImplBang
| HsUnpack (Maybe Coercion)
-- ^ Strict and unpacked field
-- co :: arg-ty ~ product-ty HsBang
deriving (Data.Data, Data.Typeable)
deriving Data.Data
-- | What strictness annotation the user wrote
data SrcStrictness = SrcLazy -- ^ Lazy, ie '~'
| SrcStrict -- ^ Strict, ie '!'
| NoSrcStrict -- ^ no strictness annotation
deriving (Eq, Data.Data, Data.Typeable)
deriving (Eq, Data.Data)
-- | What unpackedness the user requested
data SrcUnpackedness = SrcUnpack -- ^ {-# UNPACK #-} specified
| SrcNoUnpack -- ^ {-# NOUNPACK #-} specified
| NoSrcUnpack -- ^ no unpack pragma
deriving (Eq, Data.Data, Data.Typeable)
deriving (Eq, Data.Data)
......
......@@ -95,7 +95,7 @@ data FieldLbl a = FieldLabel {
-- in the defining module for this datatype?
flSelector :: a -- ^ Record selector function
}
deriving (Eq, Functor, Foldable, Traversable, Typeable)
deriving (Eq, Functor, Foldable, Traversable)
deriving instance Data a => Data (FieldLbl a)
instance Outputable a => Outputable (FieldLbl a) where
......
......@@ -61,7 +61,7 @@ import Data.Int
import Data.Ratio
import Data.Word
import Data.Char
import Data.Data ( Data, Typeable )
import Data.Data ( Data )
import Numeric ( fromRat )
{-
......@@ -116,7 +116,7 @@ data Literal
| LitInteger Integer Type -- ^ Integer literals
-- See Note [Integer literals]
deriving (Data, Typeable)
deriving Data
{-
Note [Integer literals]
......
......@@ -9,7 +9,6 @@ These are Uniquable, hence we can build Maps with Modules as
the keys.
-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE MultiParamTypeClasses #-}
......@@ -234,7 +233,6 @@ addBootSuffixLocn locn
-- | A ModuleName is essentially a simple string, e.g. @Data.List@.
newtype ModuleName = ModuleName FastString
deriving Typeable
instance Uniquable ModuleName where
getUnique (ModuleName nm) = getUnique nm
......@@ -320,7 +318,7 @@ data Module = Module {
moduleUnitId :: !UnitId, -- pkg-1.0
moduleName :: !ModuleName -- A.B.C
}
deriving (Eq, Ord, Typeable)
deriving (Eq, Ord)
instance Uniquable Module where
getUnique (Module p n) = getUnique (unitIdFS p `appendFS` moduleNameFS n)
......@@ -388,7 +386,7 @@ instance DbModuleRep UnitId ModuleName Module where
-- it is just the package name, but for user compiled packages, it is a hash.
-- ToDo: when the key is a hash, we can do more clever things than store
-- the hex representation and hash-cons those strings.
newtype UnitId = PId FastString deriving( Eq, Typeable )
newtype UnitId = PId FastString deriving Eq
-- here to avoid module loops with PackageConfig
instance Uniquable UnitId where
......
......@@ -5,7 +5,6 @@
\section[Name]{@Name@: to transmit name info from renamer to typechecker}
-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE RecordWildCards #-}
-- |
......@@ -109,7 +108,6 @@ data Name = Name {
n_uniq :: {-# UNPACK #-} !Int,
n_loc :: !SrcSpan -- Definition site
}
deriving Typeable
-- NOTE: we make the n_loc field strict to eliminate some potential
-- (and real!) space leaks, due to the fact that we don't look at
......
......@@ -227,7 +227,6 @@ data OccName = OccName
{ occNameSpace :: !NameSpace
, occNameFS :: !FastString
}
deriving Typeable
instance Eq OccName where
(OccName sp1 s1) == (OccName sp2 s2) = s1 == s2 && sp1 == sp2
......@@ -386,7 +385,7 @@ instance Uniquable OccName where
getUnique (OccName TcClsName fs) = mkTcOccUnique fs
newtype OccEnv a = A (UniqFM a)
deriving (Data, Typeable)
deriving Data
emptyOccEnv :: OccEnv a
unitOccEnv :: OccName -> a -> OccEnv a
......
......@@ -5,7 +5,7 @@
\section[PatSyn]{@PatSyn@: Pattern synonyms}
-}
{-# LANGUAGE CPP, DeriveDataTypeable #-}
{-# LANGUAGE CPP #-}
module PatSyn (
-- * Main data types
......@@ -34,7 +34,6 @@ import Var
import FieldLabel
import qualified Data.Data as Data
import qualified Data.Typeable
import Data.Function
import Data.List
......@@ -108,7 +107,6 @@ data PatSyn
-- => arg_tys -> res_ty
-- See Note [Builder for pattern synonyms with unboxed type]
}
deriving Data.Typeable.Typeable
{- Note [Pattern synonym signatures]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
......
......@@ -136,7 +136,7 @@ data RdrName
-- (2) By Template Haskell, when TH has generated a unique name
--
-- Such a 'RdrName' can be created by using 'getRdrName' on a 'Name'
deriving (Data, Typeable)
deriving Data
{-
************************************************************************
......@@ -440,7 +440,7 @@ data GlobalRdrElt
, gre_par :: Parent
, gre_lcl :: Bool -- ^ True <=> the thing was defined locally
, gre_imp :: [ImportSpec] -- ^ In scope through these imports
} deriving (Data, Typeable)
} deriving Data
-- INVARIANT: either gre_lcl = True or gre_imp is non-empty
-- See Note [GlobalRdrElt provenance]
......@@ -451,7 +451,7 @@ data Parent = NoParent
| FldParent { par_is :: Name, par_lbl :: Maybe FieldLabelString }
-- ^ See Note [Parents for record fields]
| PatternSynonym
deriving (Eq, Data, Typeable)
deriving (Eq, Data)
instance Outputable Parent where
ppr NoParent = empty
......@@ -1020,7 +1020,7 @@ shadowName env name
-- It's quite elaborate so that we can give accurate unused-name warnings.
data ImportSpec = ImpSpec { is_decl :: ImpDeclSpec,
is_item :: ImpItemSpec }
deriving( Eq, Ord, Data, Typeable )
deriving( Eq, Ord, Data )
-- | Describes a particular import declaration and is
-- shared among all the 'Provenance's for that decl
......@@ -1035,7 +1035,7 @@ data ImpDeclSpec
is_as :: ModuleName, -- ^ Import alias, e.g. from @as M@ (or @Muggle@ if there is no @as@ clause)
is_qual :: Bool, -- ^ Was this import qualified?
is_dloc :: SrcSpan -- ^ The location of the entire import declaration
} deriving (Data, Typeable)
} deriving Data
-- | Describes import info a particular Name
data ImpItemSpec
......@@ -1054,7 +1054,7 @@ data ImpItemSpec
--
-- Here the constructors of @T@ are not named explicitly;
-- only @T@ is named explicitly.
deriving (Data, Typeable)
deriving Data
instance Eq ImpDeclSpec where
p1 == p2 = case p1 `compare` p2 of EQ -> True; _ -> False
......
......@@ -226,7 +226,7 @@ data RealSrcSpan
srcSpanELine :: {-# UNPACK #-} !Int,
srcSpanECol :: {-# UNPACK #-} !Int
}
deriving (Eq, Typeable)
deriving Eq
-- | A 'SrcSpan' identifies either a specific portion of a text file
-- or a human-readable description of a location.
......@@ -235,8 +235,8 @@ data SrcSpan =
| UnhelpfulSpan !FastString -- Just a general indication
-- also used to indicate an empty span
deriving (Eq, Ord, Typeable, Show) -- Show is used by Lexer.x, because we
-- derive Show for Token
deriving (Eq, Ord, Show) -- Show is used by Lexer.x, because we
-- derive Show for Token
-- | Built-in "bad" 'SrcSpan's for common sources of location uncertainty
noSrcSpan, wiredInSrcSpan, interactiveSrcSpan :: SrcSpan
......@@ -485,7 +485,7 @@ pprUserRealSpan show_path (RealSrcSpan' src_path sline scol eline ecol)
-- | We attach SrcSpans to lots of things, so let's have a datatype for it.
data GenLocated l e = L l e
deriving (Eq, Ord, Typeable, Data, Functor, Foldable, Traversable)
deriving (Eq, Ord, Data, Functor, Foldable, Traversable)
type Located e = GenLocated SrcSpan e
type RealLocated e = GenLocated RealSrcSpan e
......
......@@ -5,7 +5,7 @@
\section{@Vars@: Variables}
-}
{-# LANGUAGE CPP, DeriveDataTypeable, MultiWayIf #-}
{-# LANGUAGE CPP, MultiWayIf #-}
-- |
-- #name_types#
......@@ -186,7 +186,6 @@ data Var
idScope :: IdScope,
id_details :: IdDetails, -- Stable, doesn't change
id_info :: IdInfo } -- Unstable, updated by simplifier
deriving Typeable
data IdScope -- See Note [GlobalId/LocalId]
= GlobalId
......
......@@ -263,7 +263,7 @@ data Expr b
| Tick (Tickish Id) (Expr b)
| Type Type
| Coercion Coercion
deriving (Data, Typeable)
deriving Data
-- | Type synonym for expressions that occur in function argument positions.
-- Only 'Arg' should contain a 'Type' at top level, general 'Expr' should not
......@@ -290,7 +290,7 @@ data AltCon
-- See Note [Literal alternatives]
| DEFAULT -- ^ Trivial alternative: @case e of { _ -> ... }@
deriving (Eq, Ord, Data, Typeable)
deriving (Eq, Ord, Data)
-- | Binding, used for top level bindings in a module and local bindings in a @let@.
......@@ -298,7 +298,7 @@ data AltCon
-- See Note [GHC Formalism] in coreSyn/CoreLint.hs
data Bind b = NonRec b (Expr b)
| Rec [(b, (Expr b))]
deriving (Data, Typeable)
deriving Data
{-
Note [Shadowing]
......@@ -508,7 +508,7 @@ data Tickish id =
-- (uses same names as CCs)
}
deriving (Eq, Ord, Data, Typeable)
deriving (Eq, Ord, Data)
-- | A "counting tick" (where tickishCounts is True) is one that
-- counts evaluations in some way. We cannot discard a counting tick,
......@@ -729,7 +729,7 @@ data IsOrphan
| NotOrphan OccName -- The OccName 'n' witnesses the instance's non-orphanhood
-- In that case, the instance is fingerprinted as part
-- of the definition of 'n's definition
deriving (Data, Typeable)
deriving Data
-- | Returns true if 'IsOrphan' is orphan.
isOrphan :: IsOrphan -> Bool
......
......@@ -74,7 +74,6 @@ data HsLocalBindsLR idL idR
| HsIPBinds (HsIPBinds idR)
| EmptyLocalBinds
deriving (Typeable)
deriving instance (DataId idL, DataId idR)
=> Data (HsLocalBindsLR idL idR)
......@@ -98,7 +97,6 @@ data HsValBindsLR idL idR
| ValBindsOut
[(RecFlag, LHsBinds idL)]
[LSig Name]
deriving (Typeable)
deriving instance (DataId idL, DataId idR)
=> Data (HsValBindsLR idL idR)
......@@ -227,7 +225,6 @@ data HsBindLR idL idR
-- For details on above see note [Api annotations] in ApiAnnotation
deriving (Typeable)
deriving instance (DataId idL, DataId idR)
=> Data (HsBindLR idL idR)
......@@ -249,7 +246,7 @@ data ABExport id
, abe_wrap :: HsWrapper -- ^ See Note [ABExport wrapper]
-- Shape: (forall abs_tvs. abs_ev_vars => abe_mono) ~ abe_poly
, abe_prags :: TcSpecPrags -- ^ SPECIALISE pragmas
} deriving (Data, Typeable)
} deriving Data
-- | - 'ApiAnnotation.AnnKeywordId' : 'ApiAnnotation.AnnPattern',
-- 'ApiAnnotation.AnnEqual','ApiAnnotation.AnnLarrow'
......@@ -263,7 +260,7 @@ data PatSynBind idL idR
psb_args :: HsPatSynDetails (Located idR), -- ^ Formal parameter names
psb_def :: LPat idR, -- ^ Right-hand side
psb_dir :: HsPatSynDir idR -- ^ Directionality
} deriving (Typeable)
}
deriving instance (DataId idL, DataId idR)
=> Data (PatSynBind idL idR)
......@@ -620,7 +617,6 @@ data HsIPBinds id
[LIPBind id]
TcEvBinds -- Only in typechecker output; binds
-- uses of the implicit parameters
deriving (Typeable)
deriving instance (DataId id) => Data (HsIPBinds id)
isEmptyIPBinds :: HsIPBinds id -> Bool
......@@ -644,7 +640,6 @@ type LIPBind id = Located (IPBind id)
-- For details on above see note [Api annotations] in ApiAnnotation
data IPBind id
= IPBind (Either (Located HsIPName) id) (LHsExpr id)
deriving (Typeable)
deriving instance (DataId name) => Data (IPBind name)
instance (OutputableBndr id) => Outputable (HsIPBinds id) where
......@@ -794,20 +789,19 @@ data Sig name
| MinimalSig SourceText (LBooleanFormula (Located name))
-- Note [Pragma source text] in BasicTypes
deriving (Typeable)
deriving instance (DataId name) => Data (Sig name)
type LFixitySig name = Located (FixitySig name)
data FixitySig name = FixitySig [Located name] Fixity
deriving (Data, Typeable)
deriving Data
-- | TsSpecPrags conveys pragmas from the type checker to the desugarer
data TcSpecPrags
= IsDefaultMethod -- ^ Super-specialised: a default method should
-- be macro-expanded at every call site
| SpecPrags [LTcSpecPrag]
deriving (Data, Typeable)
deriving Data
type LTcSpecPrag = Located TcSpecPrag
......@@ -818,7 +812,7 @@ data TcSpecPrag
InlinePragma
-- ^ The Id to be specialised, an wrapper that specialises the
-- polymorphic function, and inlining spec for the specialised function
deriving (Data, Typeable)
deriving Data
noSpecPrags :: TcSpecPrags
noSpecPrags = SpecPrags []
......@@ -945,7 +939,7 @@ data HsPatSynDetails a
= InfixPatSyn a a
| PrefixPatSyn [a]
| RecordPatSyn [RecordPatSynField a]
deriving (Typeable, Data)
deriving Data
-- See Note [Record PatSyn Fields]
......@@ -955,7 +949,7 @@ data RecordPatSynField a
, recordPatSynPatVar :: a
-- Filled in by renamer, the name used internally
-- by the pattern
} deriving (Typeable, Data)
} deriving Data
......@@ -1043,5 +1037,4 @@ data HsPatSynDir id
= Unidirectional
| ImplicitBidirectional
| ExplicitBidirectional (MatchGroup id (LHsExpr id))
deriving (Typeable)
deriving instance (DataId id) => Data (HsPatSynDir id)
This diff is collapsed.
......@@ -15,7 +15,7 @@ import FastString
import Data.Data
newtype HsDocString = HsDocString FastString
deriving (Eq, Show, Data, Typeable)
deriving (Eq, Show, Data)
type LHsDocString = Located HsDocString
......
......@@ -95,7 +95,6 @@ noPostTcTable = []
data SyntaxExpr id = SyntaxExpr { syn_expr :: HsExpr id
, syn_arg_wraps :: [HsWrapper]
, syn_res_wrap :: HsWrapper }
deriving (Typeable)
deriving instance (DataId id) => Data (SyntaxExpr id)
-- | This is used for rebindable-syntax pieces that are too polymorphic
......@@ -179,7 +178,7 @@ data UnboundVar
| TrueExprHole OccName -- ^ A "true" expression hole (_ or _x)
deriving (Data, Typeable)
deriving Data
instance Outputable UnboundVar where
ppr = ppr . unboundVarOcc
......@@ -658,7 +657,6 @@ data HsExpr id
| HsWrap HsWrapper -- TRANSLATION
(HsExpr id)
deriving (Typeable)
deriving instance (DataId id) => Data (HsExpr id)
-- | HsTupArg is used for tuple sections
......@@ -671,7 +669,6 @@ type LHsTupArg id = Located (HsTupArg id)
data HsTupArg id
= Present (LHsExpr id) -- ^ The argument
| Missing (PostTc id Type) -- ^ The argument is missing, but this is its type
deriving (Typeable)
deriving instance (DataId id) => Data (HsTupArg id)
tupArgPresent :: LHsTupArg id -> Bool
......@@ -1143,11 +1140,10 @@ data HsCmd id
(HsCmd id) -- If cmd :: arg1 --> res
-- wrap :: arg1 "->" arg2
-- Then (HsCmdWrap wrap cmd) :: arg2 --> res
deriving (Typeable)
deriving instance (DataId id) => Data (HsCmd id)
data HsArrAppType = HsHigherOrderApp | HsFirstOrderApp
deriving (Data, Typeable)
deriving Data
{- | Top-level command, introducing a new arrow.
......@@ -1162,7 +1158,6 @@ data HsCmdTop id
(PostTc id Type) -- Nested tuple of inputs on the command's stack
(PostTc id Type) -- return type of the command
(CmdSyntaxTable id) -- See Note [CmdSyntaxTable]
deriving (Typeable)
deriving instance (DataId id) => Data (HsCmdTop id)