on master help sign in
Use GHC generics for NFData instances

This gets rid of a lot of code. Much of it was generated with the "derive" tool, but some of it wasn't. I tested compilation speed by compiling the benchmarks with bench[1] and there was no statistically significant difference. [1]: https://github.com/Gabriel439/bench

commit9baa5ce7807213f66814ce1b23a087a408e7fd07 authorEcho Nolan <echo@echonolan.net> dateTue 14 Jun 2016, 23:29 (10 years ago) parente621121
10 files changed+202−1045
src/IRTS/CodegenCommon.hs+4−1 src/IRTS/Lang.hs+3−2 src/Idris/AbsSyntaxTree.hs+46−40 src/Idris/Colours.hs+3−1 src/Idris/Core/CaseTree.hs+6−4 src/Idris/Core/DeepSeq.hs+37−278 src/Idris/Core/Evaluate.hs+10−6 src/Idris/Core/TT.hs+28−27 src/Idris/DeepSeq.hs+59−680 src/Idris/Docstrings.hs+6−6
src/IRTS/CodegenCommon.hs+4−1
@@ -1,3 +1,4 @@
1+{-# LANGUAGE DeriveGeneric #-}
12{-|
23Module : IRTS.CodegenCommon
34Description : Common data structures required for all code generators.
@@ -7,12 +8,14 @@ Maintainer : The Idris Community.
78-}
89module IRTS.CodegenCommon where
910
11+import GHC.Generics (Generic)
12+
1013import Idris.Core.TT
1114import IRTS.Simplified
1215import IRTS.Defunctionalise
1316
1417data DbgLevel = NONE | DEBUG | TRACE deriving Eq
15−data OutputType = Raw | Object | Executable deriving (Eq, Show)
18+data OutputType = Raw | Object | Executable deriving (Eq, Show, Generic)
1619
1720-- | Everything which might be needed in a code generator.
1821--
src/IRTS/Lang.hs+3−2
@@ -5,7 +5,7 @@ Copyright :
55License : BSD3
66Maintainer : The Idris Community.
77-}
8−{-# LANGUAGE PatternGuards, DeriveFunctor #-}
8+{-# LANGUAGE PatternGuards, DeriveFunctor, DeriveGeneric #-}
99
1010module IRTS.Lang where
1111
@@ -17,6 +17,7 @@ import Idris.Core.CaseTree
1717
1818import Data.List
1919import Debug.Trace
20+import GHC.Generics (Generic)
2021
2122data Endianness = Native | BE | LE deriving (Show, Eq)
2223
@@ -93,7 +94,7 @@ data PrimFn = LPlus ArithTy | LMinus ArithTy | LTimes ArithTy
9394 -- core or another machine. 'id' is a valid implementation
9495 | LExternal Name
9596 | LNoOp
96− deriving (Show, Eq)
97+ deriving (Show, Eq, Generic)
9798
9899-- Supported target languages for foreign calls
99100
src/Idris/AbsSyntaxTree.hs+46−40
@@ -6,7 +6,8 @@ License : BSD3
66Maintainer : The Idris Community.
77-}
88{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, DeriveFunctor,
9− DeriveDataTypeable, TypeSynonymInstances, PatternGuards #-}
9+ DeriveDataTypeable, DeriveGeneric, TypeSynonymInstances,
10+ PatternGuards #-}
1011
1112module Idris.AbsSyntaxTree where
1213
@@ -47,6 +48,7 @@ import Data.Maybe (fromMaybe, mapMaybe, maybeToList)
4748import Data.Traversable (Traversable)
4849import Data.Typeable
4950import Data.Foldable (Foldable)
51+import GHC.Generics (Generic)
5052
5153import Debug.Trace
5254
@@ -112,7 +114,7 @@ data IOption = IOption {
112114 , opt_evaltypes :: Bool -- ^ normalise types in `:t`
113115 , opt_desugarnats :: Bool
114116 , opt_autoimpls :: Bool
115− } deriving (Show, Eq)
117+ } deriving (Show, Eq, Generic)
116118
117119defaultOpts = IOption { opt_logLevel = 0
118120 , opt_logcats = []
@@ -150,7 +152,7 @@ data PPOption = PPOption {
150152 } deriving (Show)
151153
152154data Optimisation = PETransform -- ^ partial eval and associated transforms
153− deriving (Show, Eq)
155+ deriving (Show, Eq, Generic)
154156
155157defaultOptimise = [PETransform]
156158
@@ -185,7 +187,8 @@ ppOption opt = PPOption {
185187ppOptionIst :: IState -> PPOption
186188ppOptionIst = ppOption . idris_options
187189
188−data LanguageExt = TypeProviders | ErrorReflection deriving (Show, Eq, Read, Ord)
190+data LanguageExt = TypeProviders | ErrorReflection
191+ deriving (Show, Eq, Read, Ord, Generic)
189192
190193-- | The output mode in use
191194data OutputMode = RawOutput Handle -- ^ Print user output directly to the handle
@@ -196,13 +199,13 @@ data OutputMode = RawOutput Handle -- ^ Print user output directly to the
196199data ConsoleWidth = InfinitelyWide -- ^ Have pretty-printer assume that lines should not be broken
197200 | ColsWide Int -- ^ Manually specified - must be positive
198201 | AutomaticWidth -- ^ Attempt to determine width, or 80 otherwise
199− deriving (Show, Eq)
202+ deriving (Show, Eq, Generic)
200203
201204-- | If a function has no totality annotation, what do we assume?
202205data DefaultTotality = DefaultCheckingTotal -- ^ Total
203206 | DefaultCheckingPartial -- ^ Partial
204207 | DefaultCheckingCovering -- ^Total coverage, but may diverge
205− deriving (Show, Eq)
208+ deriving (Show, Eq, Generic)
206209
207210-- | The global state used in the Idris monad
208211data IState = IState {
@@ -305,13 +308,14 @@ data IState = IState {
305308 , idris_ttstats :: M.Map Term (Int, Term)
306309 , idris_fragile :: Ctxt String -- ^ Fragile names and explanation.
307310 }
311+ deriving Generic
308312
309313-- Required for parsers library, and therefore trifecta
310314instance Show IState where
311315 show = const "{internal state}"
312316
313317data SizeChange = Smaller | Same | Bigger | Unknown
314− deriving (Show, Eq)
318+ deriving (Show, Eq, Generic)
315319{-!
316320deriving instance Binary SizeChange
317321deriving instance NFData SizeChange
@@ -324,7 +328,7 @@ data CGInfo = CGInfo {
324328 calls :: [Name]
325329 , scg :: [SCGEntry]
326330 , usedpos :: [(Int, [UsageReason])]
327− } deriving Show
331+ } deriving (Show, Generic)
328332{-!
329333deriving instance Binary CGInfo
330334deriving instance NFData CGInfo
@@ -384,7 +388,7 @@ data IBCWrite = IBCFix FixDecl
384388 | IBCDeprecate Name String
385389 | IBCFragile Name String
386390 | IBCConstraint FC UConstraint
387− deriving Show
391+ deriving (Show, Generic)
388392
389393-- | The initial state for the compiler
390394idrisInit :: IState
@@ -420,12 +424,12 @@ throwError = Trans.lift . throwE
420424
421425data Codegen = Via IRFormat String
422426 | Bytecode
423− deriving (Show, Eq)
427+ deriving (Show, Eq, Generic)
424428{-!
425429deriving instance NFData Codegen
426430!-}
427431
428−data IRFormat = IBCFormat | JSONFormat deriving (Show, Eq)
432+data IRFormat = IBCFormat | JSONFormat deriving (Show, Eq, Generic)
429433
430434data HowMuchDocs = FullDocs | OverviewDocs
431435
@@ -511,7 +515,7 @@ data LogCat = IParse
511515 | IErasure
512516 | ICoverage
513517 | IIBC
514− deriving (Show, Eq, Ord)
518+ deriving (Show, Eq, Ord, Generic)
515519
516520strLogCat :: LogCat -> String
517521strLogCat IParse = "parser"
@@ -606,7 +610,7 @@ data Opt = Filename String
606610 | DesugarNats
607611 | NoElimDeprecationWarnings -- ^ Don't show deprecation warnings for %elim
608612 | NoOldTacticDeprecationWarnings -- ^ Don't show deprecation warnings for old-style tactics
609− deriving (Show, Eq)
613+ deriving (Show, Eq, Generic)
610614
611615data ElabShellCmd = EQED
612616 | EAbandon
@@ -625,7 +629,7 @@ data Fixity = Infixl { prec :: Int }
625629 | Infixr { prec :: Int }
626630 | InfixN { prec :: Int }
627631 | PrefixN { prec :: Int }
628− deriving Eq
632+ deriving (Eq, Generic)
629633{-!
630634deriving instance Binary Fixity
631635deriving instance NFData Fixity
@@ -638,7 +642,7 @@ instance Show Fixity where
638642 show (PrefixN i) = "prefix " ++ show i
639643
640644data FixDecl = Fix Fixity String
641− deriving Eq
645+ deriving (Eq, Generic)
642646
643647instance Show FixDecl where
644648 show (Fix f s) = show f ++ " " ++ s
@@ -653,7 +657,7 @@ instance Ord FixDecl where
653657
654658
655659data Static = Static | Dynamic
656− deriving (Show, Eq, Data, Typeable)
660+ deriving (Show, Eq, Data, Generic, Typeable)
657661{-!
658662deriving instance Binary Static
659663deriving instance NFData Static
@@ -677,7 +681,7 @@ data Plicity = Imp { pargopts :: [ArgOpt]
677681 , pstatic :: Static
678682 , pscript :: PTerm
679683 }
680− deriving (Show, Eq, Data, Typeable)
684+ deriving (Show, Eq, Data, Generic, Typeable)
681685
682686{-!
683687deriving instance Binary Plicity
@@ -721,7 +725,7 @@ data FnOpt = Inlinable -- ^ always evaluate when simplifying
721725 | Constructor -- ^ Data constructor type
722726 | AutoHint -- ^ use in auto implicit search
723727 | PEGenerated -- ^ generated by partial evaluator
724− deriving (Show, Eq)
728+ deriving (Show, Eq, Generic)
725729{-!
726730deriving instance Binary FnOpt
727731deriving instance NFData FnOpt
@@ -739,7 +743,7 @@ dictionary = elem Dictionary
739743-- | Type provider - what to provide
740744data ProvideWhat' t = ProvTerm t t -- ^ the first is the goal type, the second is the term
741745 | ProvPostulate t -- ^ goal type must be Type, so only term
742− deriving (Show, Eq, Functor)
746+ deriving (Show, Eq, Functor, Generic)
743747
744748type ProvideWhat = ProvideWhat' PTerm
745749
@@ -824,7 +828,7 @@ data PDecl' t
824828 -- | FC is decl-level, for errors, and Strings represent the
825829 -- namespace
826830 | PRunElabDecl FC t [String]
827− deriving Functor
831+ deriving (Functor, Generic)
828832{-!
829833deriving instance Binary PDecl'
830834deriving instance NFData PDecl'
@@ -851,6 +855,7 @@ data Directive = DLib Codegen String
851855 | DFragile Name String
852856 | DAutoImplicits Bool
853857 | DUsed FC Name Name
858+ deriving Generic
854859
855860-- | A set of instructions for things that need to happen in IState
856861-- after a term elaboration when there's been reflected elaboration.
@@ -895,7 +900,7 @@ data PClause' t = PClause FC Name t [t] t [PDecl' t] -- ^ A
895900 | PWith FC Name t [t] t (Maybe (Name, FC)) [PDecl' t]
896901 | PClauseR FC [t] t [PDecl' t]
897902 | PWithR FC [t] t (Maybe (Name, FC)) [PDecl' t]
898− deriving Functor
903+ deriving (Functor, Generic)
899904{-!
900905deriving instance Binary PClause'
901906deriving instance NFData PClause'
@@ -913,7 +918,7 @@ data PData' t =
913918 | PLaterdecl { d_name :: Name
914919 , d_name_fc :: FC
915920 , d_tcon :: t
916− } deriving Functor
921+ } deriving (Functor, Generic)
917922
918923-- | Transform the FCs in a PData and its associated terms. The first
919924-- function transforms the general-purpose FCs, and the second
@@ -1103,7 +1108,7 @@ updateNs ns t = mapPT updateRef t
11031108data PunInfo = IsType
11041109 | IsTerm
11051110 | TypeOrTerm
1106− deriving (Eq, Show, Data, Typeable)
1111+ deriving (Eq, Show, Data, Typeable, Generic)
11071112
11081113-- | High level language terms
11091114data PTerm = PQuote Raw -- ^ Inclusion of a core term into the
@@ -1170,12 +1175,12 @@ data PTerm = PQuote Raw -- ^ Inclusion of a core term into the
11701175 | PConstSugar FC PTerm
11711176 -- ^ A desugared constant. The FC is a precise source
11721177 -- location that will be used to highlight it later.
1173− deriving (Eq, Data, Typeable)
1178+ deriving (Eq, Data, Typeable, Generic)
11741179
11751180data PAltType = ExactlyOne Bool -- ^ flag sets whether delay is allowed
11761181 | FirstSuccess
11771182 | TryImplicit
1178− deriving (Eq, Data, Typeable)
1183+ deriving (Eq, Data, Generic, Typeable)
11791184
11801185-- | Transform the FCs in a PTerm. The first function transforms the
11811186-- general-purpose FCs, and the second transforms those that are used
@@ -1296,7 +1301,7 @@ data PTactic' t = Intro [Name] | Intros | Focus Name
12961301 | TFail [ErrorReportPart]
12971302 | Qed | Abandon
12981303 | SourceFC
1299− deriving (Show, Eq, Functor, Foldable, Traversable, Data, Typeable)
1304+ deriving (Show, Eq, Functor, Foldable, Traversable, Data, Generic, Typeable)
13001305{-!
13011306deriving instance Binary PTactic'
13021307deriving instance NFData PTactic'
@@ -1343,7 +1348,7 @@ data PDo' t = DoExp FC t
13431348 | DoBindP FC t t [(t,t)]
13441349 | DoLet FC Name FC t t -- ^ second FC is precise name location
13451350 | DoLetP FC t t
1346− deriving (Eq, Functor, Data, Typeable)
1351+ deriving (Eq, Functor, Data, Generic, Typeable)
13471352{-!
13481353deriving instance Binary PDo'
13491354deriving instance NFData PDo'
@@ -1384,13 +1389,13 @@ data PArg' t = PImp { priority :: Int
13841389 , getScript :: t
13851390 , getTm :: t
13861391 }
1387− deriving (Show, Eq, Functor, Data, Typeable)
1392+ deriving (Show, Eq, Functor, Data, Generic, Typeable)
13881393
13891394data ArgOpt = AlwaysShow
13901395 | HideDisplay
13911396 | InaccessibleArg
13921397 | UnknownImp
1393− deriving (Show, Eq, Data, Typeable)
1398+ deriving (Show, Eq, Data, Generic, Typeable)
13941399
13951400instance Sized a => Sized (PArg' a) where
13961401 size (PImp p _ l nm trm) = 1 + size nm + size trm
@@ -1480,7 +1485,7 @@ data ClassInfo = CI {
14801485 , class_params :: [Name]
14811486 , class_instances :: [(Name, Bool)] -- ^ the Bool is whether to include in instance search, so named instances are excluded
14821487 , class_determiners :: [Int]
1483− } deriving Show
1488+ } deriving (Show, Generic)
14841489{-!
14851490deriving instance Binary ClassInfo
14861491deriving instance NFData ClassInfo
@@ -1491,17 +1496,17 @@ data RecordInfo = RI {
14911496 record_parameters :: [(Name,PTerm)]
14921497 , record_constructor :: Name
14931498 , record_projections :: [Name]
1494− } deriving Show
1499+ } deriving (Show, Generic)
14951500
14961501-- Type inference data
14971502
14981503data TIData = TIPartial -- ^ a function with a partially defined type
14991504 | TISolution [Term] -- ^ possible solutions to a metavariable in a type
1500− deriving Show
1505+ deriving (Show, Generic)
15011506
15021507-- | Miscellaneous information about functions
15031508data FnInfo = FnInfo { fn_params :: [Int] }
1504− deriving Show
1509+ deriving (Show, Generic)
15051510{-!
15061511deriving instance Binary FnInfo
15071512deriving instance NFData FnInfo
@@ -1510,7 +1515,7 @@ deriving instance NFData FnInfo
15101515data OptInfo = Optimise {
15111516 inaccessible :: [(Int,Name)] -- includes names for error reporting
15121517 , detaggable :: Bool
1513− } deriving Show
1518+ } deriving (Show, Generic)
15141519{-!
15151520deriving instance Binary OptInfo
15161521deriving instance NFData OptInfo
@@ -1528,7 +1533,7 @@ data DSL' t = DSL {
15281533 , dsl_lambda :: Maybe t
15291534 , dsl_let :: Maybe t
15301535 , dsl_pi :: Maybe t
1531− } deriving (Show, Functor)
1536+ } deriving (Show, Functor, Generic)
15321537{-!
15331538deriving instance Binary DSL'
15341539deriving instance NFData DSL'
@@ -1539,7 +1544,7 @@ type DSL = DSL' PTerm
15391544data SynContext = PatternSyntax
15401545 | TermSyntax
15411546 | AnySyntax
1542− deriving Show
1547+ deriving (Show, Generic)
15431548{-!
15441549deriving instance Binary SynContext
15451550deriving instance NFData SynContext
@@ -1547,7 +1552,7 @@ deriving instance NFData SynContext
15471552
15481553data Syntax = Rule [SSymbol] PTerm SynContext
15491554 | DeclRule [SSymbol] [PDecl]
1550− deriving Show
1555+ deriving (Show, Generic)
15511556
15521557syntaxNames :: Syntax -> [Name]
15531558syntaxNames (Rule syms _ _) = mapMaybe ename syms
@@ -1570,7 +1575,7 @@ data SSymbol = Keyword Name
15701575 | Binding Name
15711576 | Expr Name
15721577 | SimpleExpr Name
1573− deriving (Show, Eq)
1578+ deriving (Show, Eq, Generic)
15741579
15751580
15761581{-!
@@ -1579,6 +1584,7 @@ deriving instance NFData SSymbol
15791584!-}
15801585
15811586newtype SyntaxRules = SyntaxRules { syntaxRulesList :: [Syntax] }
1587+ deriving Generic
15821588
15831589emptySyntaxRules :: SyntaxRules
15841590emptySyntaxRules = SyntaxRules []
@@ -1632,7 +1638,7 @@ initDSL = DSL (PRef f [] (sUN ">>="))
16321638
16331639data Using = UImplicit Name PTerm
16341640 | UConstraint Name [Name]
1635− deriving (Show, Eq, Data, Typeable)
1641+ deriving (Show, Eq, Data, Generic, Typeable)
16361642{-!
16371643deriving instance Binary Using
16381644deriving instance NFData Using
@@ -1656,7 +1662,7 @@ data SyntaxInfo = Syn {
16561662 , syn_in_quasiquote :: Int
16571663 , syn_toplevel :: Bool
16581664 , withAppAllowed :: Bool
1659− } deriving Show
1665+ } deriving (Show, Generic)
16601666{-!
16611667deriving instance NFData SyntaxInfo
16621668deriving instance Binary SyntaxInfo
src/Idris/Colours.hs+3−1
@@ -1,3 +1,4 @@
1+{-# LANGUAGE DeriveGeneric #-}
12{-|
23Module : Idris.Colours
34Description : Support for colours within Idris.
@@ -14,6 +15,7 @@ module Idris.Colours (
1415 , colourisePrompt, colourise, ColourType(..), hStartColourise, hEndColourise
1516 ) where
1617
18+import GHC.Generics (Generic)
1719import System.Console.ANSI
1820import System.IO (Handle)
1921
@@ -37,7 +39,7 @@ data ColourTheme = ColourTheme { keywordColour :: IdrisColour
3739 , promptColour :: IdrisColour
3840 , postulateColour :: IdrisColour
3941 }
40− deriving (Eq, Show)
42+ deriving (Eq, Show, Generic)
4143
4244-- | Idris's default console colour theme
4345defaultTheme :: ColourTheme
src/Idris/Core/CaseTree.hs+6−4
@@ -18,7 +18,8 @@ allows casing on arbitrary terms, here we choose to maintain the distinction
1818in order to allow for better optimisation opportunities.
1919
2020-}
21−{-# LANGUAGE PatternGuards, DeriveFunctor, TypeSynonymInstances #-}
21+{-# LANGUAGE PatternGuards, DeriveFunctor, TypeSynonymInstances,
22+ DeriveGeneric #-}
2223
2324module Idris.Core.CaseTree (
2425 CaseDef(..), SC, SC'(..), CaseAlt, CaseAlt'(..), ErasureInfo
@@ -36,6 +37,7 @@ import Data.Maybe
3637import Data.List hiding (partition)
3738import qualified Data.List(partition)
3839import Debug.Trace
40+import GHC.Generics (Generic)
3941
4042data CaseDef = CaseDef [Name] !SC [Term]
4143 deriving Show
@@ -45,14 +47,14 @@ data SC' t = Case CaseType Name [CaseAlt' t] -- ^ invariant: lowest tags first
4547 | STerm !t
4648 | UnmatchedCase String -- ^ error message
4749 | ImpossibleCase -- ^ already checked to be impossible
48− deriving (Eq, Ord, Functor)
50+ deriving (Eq, Ord, Functor, Generic)
4951{-!
5052deriving instance Binary SC'
5153deriving instance NFData SC'
5254!-}
5355
5456data CaseType = Updatable | Shared
55− deriving (Eq, Ord, Show)
57+ deriving (Eq, Ord, Show, Generic)
5658
5759type SC = SC' Term
5860
@@ -61,7 +63,7 @@ data CaseAlt' t = ConCase Name Int [Name] !(SC' t)
6163 | ConstCase Const !(SC' t)
6264 | SucCase Name !(SC' t)
6365 | DefaultCase !(SC' t)
64− deriving (Show, Eq, Ord, Functor)
66+ deriving (Show, Eq, Ord, Functor, Generic)
6567{-!
6668deriving instance Binary CaseAlt'
6769deriving instance NFData CaseAlt'
src/Idris/Core/DeepSeq.hs+37−278
@@ -1,6 +1,6 @@
11{-|
22Module : Idris.Core.DeepSeq
3−Description : Marshalling information for TT.
3+Description : NFData instances for TT.
44Copyright :
55License : BSD3
66Maintainer : The Idris Community.
@@ -16,287 +16,46 @@ import Idris.Core.Evaluate
1616
1717import Control.DeepSeq
1818
19−instance NFData Name where
20− rnf (UN x1) = rnf x1 `seq` ()
21− rnf (NS x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
22− rnf (MN x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
23− rnf (SN x1) = rnf x1 `seq` ()
24− rnf (SymRef x1) = rnf x1 `seq` ()
19+instance NFData Name
2520
26−instance NFData Context where
27− rnf ctxt = rnf (next_tvar ctxt) `seq` rnf (definitions ctxt) `seq` ()
21+instance NFData Context
2822
2923-- | Forcing the contents of a context, for diagnosing and working
3024-- around space leaks
3125forceDefCtxt :: Context -> Context
3226forceDefCtxt (force -> !ctxt) = ctxt
3327
34−instance NFData NameOutput where
35− rnf TypeOutput = ()
36− rnf FunOutput = ()
37− rnf DataOutput = ()
38− rnf MetavarOutput = ()
39− rnf PostulateOutput = ()
40−
41−instance NFData TextFormatting where
42− rnf BoldText = ()
43− rnf ItalicText = ()
44− rnf UnderlineText = ()
45−
46−instance NFData Ordering where
47− rnf LT = ()
48− rnf EQ = ()
49− rnf GT = ()
50−
51−instance NFData OutputAnnotation where
52− rnf (AnnName x1 x2 x3 x4) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
53− rnf (AnnBoundName x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
54− rnf (AnnConst x1) = rnf x1 `seq` ()
55− rnf (AnnData x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
56− rnf (AnnType x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
57− rnf (AnnKeyword) = ()
58− rnf (AnnFC x) = rnf x `seq` ()
59− rnf (AnnTextFmt x) = rnf x `seq` ()
60− rnf (AnnLink x) = rnf x `seq` ()
61− rnf (AnnTerm x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
62− rnf (AnnSearchResult x1) = rnf x1 `seq` ()
63− rnf (AnnErr x1) = rnf x1 `seq` ()
64− rnf (AnnNamespace x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
65− rnf (AnnQuasiquote) = ()
66− rnf (AnnAntiquote) = ()
67−
68−instance NFData SpecialName where
69− rnf (WhereN x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
70− rnf (WithN x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
71− rnf (InstanceN x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
72− rnf (ParentN x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
73− rnf (MethodN x1) = rnf x1 `seq` ()
74− rnf (CaseN x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
75− rnf (ElimN x1) = rnf x1 `seq` ()
76− rnf (InstanceCtorN x1) = rnf x1 `seq` ()
77− rnf (MetaN x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
78−
79−instance NFData Universe where
80− rnf NullType = ()
81− rnf UniqueType = ()
82− rnf AllTypes = ()
83−
84−instance NFData Raw where
85− rnf (Var x1) = rnf x1 `seq` ()
86− rnf (RBind x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
87− rnf (RApp x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
88− rnf RType = ()
89− rnf (RUType x1) = rnf x1 `seq` ()
90− rnf (RConstant x1) = x1 `seq` ()
91−
92−instance NFData FC where
93− rnf (FC x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
94− rnf NoFC = ()
95− rnf (FileFC f) = rnf f `seq` ()
96−
97−instance NFData FC' where
98− rnf (FC' fc) = rnf fc `seq` ()
99−
100−instance NFData Provenance where
101− rnf ExpectedType = ()
102− rnf InferredVal = ()
103− rnf GivenVal = ()
104− rnf (SourceTerm x1) = rnf x1 `seq` ()
105− rnf (TooManyArgs x1) = rnf x1 `seq` ()
106−
107−instance NFData UConstraint where
108− rnf (ULT x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
109− rnf (ULE x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
110−
111−instance NFData ConstraintFC where
112− rnf (ConstraintFC x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
113−
114−instance NFData Err where
115− rnf (Msg x1) = rnf x1 `seq` ()
116− rnf (InternalMsg x1) = rnf x1 `seq` ()
117− rnf (CantUnify x1 x2 x3 x4 x5 x6)
118− = rnf x1 `seq`
119− rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` rnf x6 `seq` ()
120− rnf (InfiniteUnify x1 x2 x3)
121− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
122− rnf (CantConvert x1 x2 x3)
123− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
124− rnf (UnifyScope x1 x2 x3 x4)
125− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
126− rnf (ElaboratingArg x1 x2 x3 x4)
127− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
128− rnf (CantInferType x1) = rnf x1 `seq` ()
129− rnf (CantMatch x1) = rnf x1 `seq` ()
130− rnf (ReflectionError x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
131− rnf (ReflectionFailed x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
132− rnf (CantSolveGoal x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
133− rnf (UniqueError x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
134− rnf (UniqueKindError x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
135− rnf (NotEquality x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
136− rnf (NonFunctionType x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
137− rnf (CantIntroduce x1) = rnf x1 `seq` ()
138− rnf (TooManyArguments x1) = rnf x1 `seq` ()
139− rnf (WithFnType x1) = rnf x1 `seq` ()
140− rnf (NoSuchVariable x1) = rnf x1 `seq` ()
141− rnf (NoTypeDecl x1) = rnf x1 `seq` ()
142− rnf (NotInjective x1 x2 x3)
143− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
144− rnf (CantResolve x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
145− rnf (InvalidTCArg x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
146− rnf (CantResolveAlts x1) = rnf x1 `seq` ()
147− rnf (NoValidAlts x1) = rnf x1 `seq` ()
148− rnf (IncompleteTerm x1) = rnf x1 `seq` ()
149− rnf (NoEliminator x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
150− rnf (UniverseError x1 x2 x3 x4 x5) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` ()
151− rnf ProgramLineComment = ()
152− rnf (Inaccessible x1) = rnf x1 `seq` ()
153− rnf (UnknownImplicit x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
154− rnf (NonCollapsiblePostulate x1) = rnf x1 `seq` ()
155− rnf (AlreadyDefined x1) = rnf x1 `seq` ()
156− rnf (ProofSearchFail x1) = rnf x1 `seq` ()
157− rnf (NoRewriting x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
158− rnf (At x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
159− rnf (Elaborating x1 x2 x3 x4)
160− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
161− rnf (ProviderError x1) = rnf x1 `seq` ()
162− rnf (LoadingFailed x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
163− rnf (ElabScriptDebug x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
164− rnf (ElabScriptStuck x1) = rnf x1 `seq` ()
165− rnf (RunningElabScript x1) = rnf x1 `seq` ()
166− rnf (ElabScriptStaging x1) = rnf x1 `seq` ()
167− rnf (FancyMsg x1) = rnf x1 `seq` ()
168−
169−instance NFData ErrorReportPart where
170− rnf (TextPart x1) = rnf x1 `seq` ()
171− rnf (TermPart x1) = rnf x1 `seq` ()
172− rnf (RawPart x1) = rnf x1 `seq` ()
173− rnf (NamePart x1) = rnf x1 `seq` ()
174− rnf (SubReport x1) = rnf x1 `seq` ()
175−
176−instance NFData ImplicitInfo where
177− rnf (Impl x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
178−
179−instance (NFData b) => NFData (Binder b) where
180− rnf (Lam x1) = rnf x1 `seq` ()
181− rnf (Pi x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
182− rnf (Let x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
183− rnf (NLet x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
184− rnf (Hole x1) = rnf x1 `seq` ()
185− rnf (GHole x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
186− rnf (Guess x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
187− rnf (PVar x1) = rnf x1 `seq` ()
188− rnf (PVTy x1) = rnf x1 `seq` ()
189−
190−instance NFData UExp where
191− rnf (UVar x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
192− rnf (UVal x1) = rnf x1 `seq` ()
193−
194−instance NFData NameType where
195− rnf Bound = ()
196− rnf Ref = ()
197− rnf (DCon x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
198− rnf (TCon x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
199−
200−instance NFData NativeTy where
201− rnf IT8 = ()
202− rnf IT16 = ()
203− rnf IT32 = ()
204− rnf IT64 = ()
205−
206−instance NFData IntTy where
207− rnf (ITFixed x1) = rnf x1 `seq` ()
208− rnf ITNative = ()
209− rnf ITBig = ()
210− rnf ITChar = ()
211−
212−instance NFData ArithTy where
213− rnf (ATInt x1) = rnf x1 `seq` ()
214− rnf ATFloat = ()
215−
216−instance NFData Const where
217− rnf (I x1) = rnf x1 `seq` ()
218− rnf (BI x1) = rnf x1 `seq` ()
219− rnf (Fl x1) = rnf x1 `seq` ()
220− rnf (Ch x1) = rnf x1 `seq` ()
221− rnf (Str x1) = rnf x1 `seq` ()
222− rnf (B8 x1) = rnf x1 `seq` ()
223− rnf (B16 x1) = rnf x1 `seq` ()
224− rnf (B32 x1) = rnf x1 `seq` ()
225− rnf (B64 x1) = rnf x1 `seq` ()
226− rnf (AType x1) = rnf x1 `seq` ()
227− rnf WorldType = ()
228− rnf TheWorld = ()
229− rnf StrType = ()
230− rnf VoidType = ()
231− rnf Forgot = ()
232−
233−instance (NFData n) => NFData (TT n) where
234− rnf (P x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
235− rnf (V x1) = rnf x1 `seq` ()
236− rnf (Bind x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
237− rnf (App x1 x2 x3) = rnf x2 `seq` rnf x3 `seq` ()
238− rnf (Constant x1) = rnf x1 `seq` ()
239− rnf (Proj x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
240− rnf Erased = ()
241− rnf Impossible = ()
242− rnf (TType x1) = rnf x1 `seq` ()
243− rnf (UType _) = ()
244−
245−instance NFData Accessibility where
246− rnf Public = ()
247− rnf Frozen = ()
248− rnf Hidden = ()
249− rnf Private = ()
250−
251−
252−instance NFData Totality where
253− rnf (Total x1) = rnf x1 `seq` ()
254− rnf Productive = ()
255− rnf (Partial x1) = rnf x1 `seq` ()
256− rnf Unchecked = ()
257− rnf Generated = ()
258−
259−instance NFData PReason where
260− rnf (Other x1) = rnf x1 `seq` ()
261− rnf Itself = ()
262− rnf NotCovering = ()
263− rnf NotPositive = ()
264− rnf (UseUndef x1) = rnf x1 `seq` ()
265− rnf ExternalIO = ()
266− rnf BelieveMe = ()
267− rnf (Mutual x1) = rnf x1 `seq` ()
268− rnf NotProductive = ()
269−
270−instance NFData MetaInformation where
271− rnf EmptyMI = ()
272− rnf (DataMI x1) = rnf x1 `seq` ()
273−
274−instance NFData Def where
275− rnf (Function x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
276− rnf (TyDecl x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
277− rnf (Operator x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
278− rnf (CaseOp x1 x2 x3 x4 x5 x6)
279− = rnf x1 `seq`
280− rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` rnf x6 `seq` ()
281−
282−instance NFData CaseInfo where
283− rnf (CaseInfo x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
284−
285−instance NFData CaseDefs where
286− rnf (CaseDefs x1 x2 x3 x4)
287− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
288−
289−instance (NFData t) => NFData (SC' t) where
290− rnf (Case _ x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
291− rnf (ProjCase x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
292− rnf (STerm x1) = rnf x1 `seq` ()
293− rnf (UnmatchedCase x1) = rnf x1 `seq` ()
294− rnf ImpossibleCase = ()
295−
296−instance (NFData t) => NFData (CaseAlt' t) where
297− rnf (ConCase x1 x2 x3 x4)
298− = x1 `seq` x2 `seq` x3 `seq` rnf x4 `seq` ()
299− rnf (FnCase x1 x2 x3) = x1 `seq` x2 `seq` rnf x3 `seq` ()
300− rnf (ConstCase x1 x2) = x1 `seq` rnf x2 `seq` ()
301− rnf (SucCase x1 x2) = x1 `seq` rnf x2 `seq` ()
302− rnf (DefaultCase x1) = rnf x1 `seq` ()
28+instance NFData NameOutput
29+instance NFData TextFormatting
30+instance NFData Ordering
31+instance NFData OutputAnnotation
32+instance NFData SpecialName
33+instance NFData Universe
34+instance NFData Raw
35+instance NFData FC
36+instance NFData FC'
37+instance NFData Provenance
38+instance NFData UConstraint
39+instance NFData ConstraintFC
40+instance NFData Err
41+instance NFData ErrorReportPart
42+instance NFData ImplicitInfo
43+instance (NFData b) => NFData (Binder b)
44+instance NFData UExp
45+instance NFData NameType
46+instance NFData NativeTy
47+instance NFData IntTy
48+instance NFData ArithTy
49+instance NFData Const
50+instance (NFData a) => NFData (AppStatus a)
51+instance (NFData n) => NFData (TT n)
52+instance NFData Accessibility
53+instance NFData Totality
54+instance NFData PReason
55+instance NFData MetaInformation
56+instance NFData Def
57+instance NFData CaseInfo
58+instance NFData CaseDefs
59+instance NFData CaseType
60+instance (NFData t) => NFData (SC' t)
61+instance (NFData t) => NFData (CaseAlt' t)
src/Idris/Core/Evaluate.hs+10−6
@@ -6,7 +6,7 @@ License : BSD3
66Maintainer : The Idris Community.
77-}
88{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, BangPatterns,
9− PatternGuards #-}
9+ PatternGuards, DeriveGeneric #-}
1010{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}
1111
1212module Idris.Core.Evaluate(normalise, normaliseTrace, normaliseC,
@@ -31,6 +31,7 @@ import Control.Monad.State -- not Strict!
3131import qualified Data.Binary as B
3232import Data.Binary hiding (get, put)
3333import Data.Maybe (listToMaybe)
34+import GHC.Generics (Generic)
3435
3536import Idris.Core.TT
3637import Idris.Core.CaseTree
@@ -700,6 +701,7 @@ data Def = Function !Type !Term
700701 ![Either Term (Term, Term)] -- original definition
701702 ![([Name], Term, Term)] -- simplified for totality check definition
702703 !CaseDefs
704+ deriving Generic
703705-- [Name] SC -- Compile time case definition
704706-- [Name] SC -- Run time cae definitions
705707
@@ -709,12 +711,14 @@ data CaseDefs = CaseDefs {
709711 cases_inlined :: !([Name], SC),
710712 cases_runtime :: !([Name], SC)
711713 }
714+ deriving Generic
712715
713716data CaseInfo = CaseInfo {
714717 case_inlinable :: Bool, -- decided by machine
715718 case_alwaysinline :: Bool, -- decided by %inline flag
716719 tc_dictionary :: Bool
717720 }
721+ deriving Generic
718722
719723{-!
720724deriving instance Binary Def
@@ -761,7 +765,7 @@ instance Show Def where
761765-- Private => Programs can't access the name, doesn't reduce internally
762766
763767data Accessibility = Hidden | Public | Frozen | Private
764− deriving (Eq, Ord)
768+ deriving (Eq, Ord, Generic)
765769{-!
766770deriving instance NFData Accessibility
767771!-}
@@ -780,7 +784,7 @@ data Totality = Total [Int] -- ^ well-founded arguments
780784 | Partial PReason
781785 | Unchecked
782786 | Generated
783− deriving Eq
787+ deriving (Eq, Generic)
784788{-!
785789deriving instance NFData Totality
786790!-}
@@ -788,7 +792,7 @@ deriving instance NFData Totality
788792-- | Reasons why a function may not be total
789793data PReason = Other [Name] | Itself | NotCovering | NotPositive | UseUndef Name
790794 | ExternalIO | BelieveMe | Mutual [Name] | NotProductive
791− deriving (Show, Eq)
795+ deriving (Show, Eq, Generic)
792796{-!
793797deriving instance NFData PReason
794798!-}
@@ -825,14 +829,14 @@ deriving instance Binary PReason
825829data MetaInformation =
826830 EmptyMI -- ^ No meta-information
827831 | DataMI [Int] -- ^ Meta information for a data declaration with position of parameters
828− deriving (Eq, Show)
832+ deriving (Eq, Show, Generic)
829833
830834-- | Contexts used for global definitions and for proof state. They contain
831835-- universe constraints and existing definitions.
832836data Context = MkContext {
833837 next_tvar :: Int,
834838 definitions :: Ctxt (Def, Injectivity, Accessibility, Totality, MetaInformation)
835− } deriving Show
839+ } deriving (Show, Generic)
836840
837841
838842-- | The initial empty context
src/Idris/Core/TT.hs+28−27
@@ -23,7 +23,7 @@ TT is the core language of Idris. The language has:
2323 programs with implicit syntax into fully explicit terms.
2424-}
2525{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, DeriveFunctor,
26− DeriveDataTypeable, PatternGuards #-}
26+ DeriveDataTypeable, DeriveGeneric, PatternGuards #-}
2727{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}
2828module Idris.Core.TT(
2929 AppStatus(..), ArithTy(..), Binder(..), Const(..), Ctxt(..)
@@ -80,6 +80,7 @@ import qualified Data.Vector.Unboxed as V
8080import qualified Data.Binary as B
8181import Data.Binary hiding (get, put)
8282import Foreign.Storable (sizeOf)
83+import GHC.Generics (Generic)
8384
8485import Numeric.IEEE (IEEE (identicalIEEE))
8586
@@ -96,7 +97,7 @@ data FC = FC { _fc_fname :: String, -- ^ Filename
9697 }
9798 | NoFC -- ^ Locations for machine-generated terms
9899 | FileFC { _fc_fname :: String } -- ^ Locations with file only
99− deriving (Data, Typeable, Ord)
100+ deriving (Data, Generic, Typeable, Ord)
100101
101102-- TODO: find uses and destroy them, doing this case analysis at call sites
102103-- | Give a notion of filename associated with an FC
@@ -159,7 +160,7 @@ instance Eq FC where
159160 _ == _ = True
160161
161162-- | FC with equality
162−newtype FC' = FC' { unwrapFC :: FC } deriving (Data, Typeable, Ord)
163+newtype FC' = FC' { unwrapFC :: FC } deriving (Data, Generic, Typeable, Ord)
163164
164165instance Eq FC' where
165166 FC' fc == FC' fc' = fcEq fc fc'
@@ -198,10 +199,10 @@ instance Show FC where
198199 show (FileFC f) = f
199200
200201-- | Output annotation for pretty-printed name - decides colour
201−data NameOutput = TypeOutput | FunOutput | DataOutput | MetavarOutput | PostulateOutput deriving (Show, Eq)
202+data NameOutput = TypeOutput | FunOutput | DataOutput | MetavarOutput | PostulateOutput deriving (Show, Eq, Generic)
202203
203204-- | Text formatting output
204−data TextFormatting = BoldText | ItalicText | UnderlineText deriving (Show, Eq)
205+data TextFormatting = BoldText | ItalicText | UnderlineText deriving (Show, Eq, Generic)
205206
206207-- | Output annotations for pretty-printing
207208data OutputAnnotation = AnnName Name (Maybe NameOutput) (Maybe String) (Maybe String)
@@ -227,7 +228,7 @@ data OutputAnnotation = AnnName Name (Maybe NameOutput) (Maybe String) (Maybe St
227228 -- from that file.
228229 | AnnQuasiquote
229230 | AnnAntiquote
230− deriving (Show, Eq)
231+ deriving (Show, Eq, Generic)
231232
232233-- | Used for error reflection
233234data ErrorReportPart = TextPart String
@@ -235,7 +236,7 @@ data ErrorReportPart = TextPart String
235236 | TermPart Term
236237 | RawPart Raw
237238 | SubReport [ErrorReportPart]
238− deriving (Show, Eq, Data, Typeable)
239+ deriving (Show, Eq, Data, Generic, Typeable)
239240
240241
241242data Provenance = ExpectedType
@@ -243,7 +244,7 @@ data Provenance = ExpectedType
243244 | InferredVal
244245 | GivenVal
245246 | SourceTerm Term
246− deriving (Show, Eq, Data, Typeable)
247+ deriving (Show, Eq, Data, Generic, Typeable)
247248{-!
248249deriving instance NFData Err
249250deriving instance Binary Err
@@ -309,7 +310,7 @@ data Err' t
309310 | RunningElabScript (Err' t) -- ^ The error occurred during a top-level elaboration script
310311 | ElabScriptStaging Name
311312 | FancyMsg [ErrorReportPart]
312− deriving (Eq, Functor, Data, Typeable)
313+ deriving (Eq, Functor, Data, Generic, Typeable)
313314
314315type Err = Err' Term
315316
@@ -467,7 +468,7 @@ data Name = UN !T.Text -- ^ User-provided name
467468 | MN !Int !T.Text -- ^ Machine chosen names
468469 | SN !SpecialName -- ^ Decorated function names
469470 | SymRef Int -- ^ Reference to IBC file symbol table (used during serialisation)
470− deriving (Eq, Ord, Data, Typeable)
471+ deriving (Eq, Ord, Data, Generic, Typeable)
471472
472473txt :: String -> T.Text
473474txt = T.pack
@@ -510,7 +511,7 @@ data SpecialName = WhereN !Int !Name !Name
510511 | ElimN !Name
511512 | InstanceCtorN !Name
512513 | MetaN !Name !Name
513− deriving (Eq, Ord, Data, Typeable)
514+ deriving (Eq, Ord, Data, Generic, Typeable)
514515{-!
515516deriving instance Binary SpecialName
516517deriving instance NFData SpecialName
@@ -675,7 +676,7 @@ addAlist [] ctxt = ctxt
675676addAlist ((n, tm) : ds) ctxt = addDef n tm (addAlist ds ctxt)
676677
677678data NativeTy = IT8 | IT16 | IT32 | IT64
678− deriving (Show, Eq, Ord, Enum, Data, Typeable)
679+ deriving (Show, Eq, Ord, Enum, Data, Generic, Typeable)
679680
680681instance Pretty NativeTy OutputAnnotation where
681682 pretty IT8 = text "Bits8"
@@ -684,7 +685,7 @@ instance Pretty NativeTy OutputAnnotation where
684685 pretty IT64 = text "Bits64"
685686
686687data IntTy = ITFixed NativeTy | ITNative | ITBig | ITChar
687− deriving (Show, Eq, Ord, Data, Typeable)
688+ deriving (Show, Eq, Ord, Data, Generic, Typeable)
688689
689690intTyName :: IntTy -> String
690691intTyName ITNative = "Int"
@@ -693,7 +694,7 @@ intTyName (ITFixed sized) = "B" ++ show (nativeTyWidth sized)
693694intTyName (ITChar) = "Char"
694695
695696data ArithTy = ATInt IntTy | ATFloat -- TODO: Float vectors https://github.com/idris-lang/Idris-dev/issues/1723
696− deriving (Show, Eq, Ord, Data, Typeable)
697+ deriving (Show, Eq, Ord, Data, Generic, Typeable)
697698{-!
698699deriving instance NFData IntTy
699700deriving instance NFData NativeTy
@@ -725,7 +726,7 @@ data Const = I Int | BI Integer | Fl Double | Ch Char | Str String
725726 | AType ArithTy | StrType
726727 | WorldType | TheWorld
727728 | VoidType | Forgot
728− deriving (Ord, Data, Typeable)
729+ deriving (Ord, Data, Generic, Typeable)
729730
730731-- We need to compare Double using bit-pattern identity rather than
731732-- Haskell's Eq, which equates 0.0 and -0.0, leading to a
@@ -821,7 +822,7 @@ constDocs (B64 w) = "The sixty-four-bit value 0x" ++
821822constDocs prim = "Undocumented"
822823
823824data Universe = NullType | UniqueType | AllTypes
824− deriving (Eq, Ord, Data, Typeable)
825+ deriving (Eq, Ord, Data, Generic, Typeable)
825826
826827instance Show Universe where
827828 show UniqueType = "UniqueType"
@@ -834,7 +835,7 @@ data Raw = Var Name
834835 | RType
835836 | RUType Universe
836837 | RConstant Const
837− deriving (Show, Eq, Data, Typeable)
838+ deriving (Show, Eq, Data, Generic, Typeable)
838839
839840instance Sized Raw where
840841 size (Var name) = 1
@@ -854,7 +855,7 @@ deriving instance NFData Raw
854855
855856data ImplicitInfo = Impl { tcinstance :: Bool, toplevel_imp :: Bool,
856857 machine_gen :: Bool }
857− deriving (Show, Eq, Ord, Data, Typeable)
858+ deriving (Show, Eq, Ord, Data, Generic, Typeable)
858859
859860{-!
860861deriving instance Binary ImplicitInfo
@@ -906,7 +907,7 @@ data Binder b = Lam { binderTy :: !b {-^ type annotation for bound variable-}
906907 -- that make up pattern-match clauses)
907908 | PVTy { binderTy :: !b }
908909 -- ^ The type of a pattern binding
909− deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Data, Typeable)
910+ deriving (Show, Eq, Ord, Functor, Foldable, Traversable, Data, Generic, Typeable)
910911{-!
911912deriving instance Binary Binder
912913deriving instance NFData Binder
@@ -951,7 +952,7 @@ internalNS = "(internal)"
951952-- | Universe expressions for universe checking
952953data UExp = UVar String Int -- ^ universe variable, with source file to disambiguate
953954 | UVal Int -- ^ explicit universe level
954− deriving (Eq, Ord, Data, Typeable)
955+ deriving (Eq, Ord, Data, Generic, Typeable)
955956{-!
956957deriving instance NFData UExp
957958!-}
@@ -969,11 +970,11 @@ instance Show UExp where
969970-- | Universe constraints
970971data UConstraint = ULT UExp UExp -- ^ Strictly less than
971972 | ULE UExp UExp -- ^ Less than or equal to
972− deriving (Eq, Ord, Data, Typeable)
973+ deriving (Eq, Ord, Data, Generic, Typeable)
973974
974975data ConstraintFC = ConstraintFC { uconstraint :: UConstraint,
975976 ufc :: FC }
976− deriving (Show, Data, Typeable)
977+ deriving (Show, Data, Generic, Typeable)
977978
978979instance Eq ConstraintFC where
979980 x == y = uconstraint x == uconstraint y
@@ -991,7 +992,7 @@ data NameType = Bound
991992 | Ref
992993 | DCon {nt_tag :: Int, nt_arity :: Int, nt_unique :: Bool} -- ^ Data constructor
993994 | TCon {nt_tag :: Int, nt_arity :: Int} -- ^ Type constructor
994− deriving (Show, Ord, Data, Typeable)
995+ deriving (Show, Ord, Data, Generic, Typeable)
995996{-!
996997deriving instance Binary NameType
997998deriving instance NFData NameType
@@ -1013,7 +1014,7 @@ instance Eq NameType where
10131014data AppStatus n = Complete
10141015 | MaybeHoles
10151016 | Holes [n]
1016− deriving (Eq, Ord, Functor, Data, Typeable, Show)
1017+ deriving (Eq, Ord, Functor, Data, Generic, Typeable, Show)
10171018
10181019-- | Terms in the core language. The type parameter is the type of
10191020-- identifiers used for bindings and explicit named references;
@@ -1031,7 +1032,7 @@ data TT n = P NameType n (TT n) -- ^ named references with type
10311032 | Impossible -- ^ special case for totality checking
10321033 | TType UExp -- ^ the type of types at some level
10331034 | UType Universe -- ^ Uniqueness type universe (disjoint from TType)
1034− deriving (Ord, Functor, Data, Typeable)
1035+ deriving (Ord, Functor, Data, Generic, Typeable)
10351036{-!
10361037deriving instance Binary TT
10371038deriving instance NFData TT
@@ -1096,7 +1097,7 @@ data DataOpt = Codata -- ^ Set if the the data-type is coinductive
10961097 | DefaultEliminator -- ^ Set if an eliminator should be generated for data type
10971098 | DefaultCaseFun -- ^ Set if a case function should be generated for data type
10981099 | DataErrRev
1099− deriving (Show, Eq)
1100+ deriving (Show, Eq, Generic)
11001101
11011102type DataOpts = [DataOpt]
11021103
@@ -1105,7 +1106,7 @@ data TypeInfo = TI { con_names :: [Name],
11051106 data_opts :: DataOpts,
11061107 param_pos :: [Int],
11071108 mutual_types :: [Name] }
1108− deriving Show
1109+ deriving (Show, Generic)
11091110{-!
11101111deriving instance Binary TypeInfo
11111112deriving instance NFData TypeInfo
src/Idris/DeepSeq.hs+59−680
@@ -1,6 +1,6 @@
11{-|
22Module : Idris.DeepSeq
3−Description : Specify how to marshall Idris' IR.
3+Description : NFData instances for Idris' types
44Copyright :
55License : BSD3
66Maintainer : The Idris Community.
@@ -26,323 +26,10 @@ import Control.DeepSeq
2626import qualified Cheapskate.Types as CT
2727import qualified Idris.Docstrings as D
2828
29−instance NFData a => NFData (D.Docstring a) where
30− rnf (D.DocString opts contents) = rnf opts `seq` rnf contents `seq` ()
31−
29+-- These types don't have Generic instances
3230instance NFData CT.Options where
3331 rnf (CT.Options x1 x2 x3 x4) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
3432
35−instance NFData ConsoleWidth where
36− rnf InfinitelyWide = ()
37− rnf (ColsWide x) = rnf x `seq` ()
38− rnf AutomaticWidth = ()
39−
40−instance NFData PrimFn where
41− rnf (LPlus x) = rnf x `seq` ()
42− rnf (LMinus x) = rnf x `seq` ()
43− rnf (LTimes x) = rnf x `seq` ()
44− rnf (LUDiv x) = rnf x `seq` ()
45− rnf (LSDiv x) = rnf x `seq` ()
46− rnf (LURem x) = rnf x `seq` ()
47− rnf (LSRem x) = rnf x `seq` ()
48− rnf (LAnd x) = rnf x `seq` ()
49− rnf (LOr x) = rnf x `seq` ()
50− rnf (LXOr x) = rnf x `seq` ()
51− rnf (LCompl x) = rnf x `seq` ()
52− rnf (LSHL x) = rnf x `seq` ()
53− rnf (LLSHR x) = rnf x `seq` ()
54− rnf (LASHR x) = rnf x `seq` ()
55− rnf (LEq x) = rnf x `seq` ()
56− rnf (LLt x) = rnf x `seq` ()
57− rnf (LLe x) = rnf x `seq` ()
58− rnf (LGt x) = rnf x `seq` ()
59− rnf (LGe x) = rnf x `seq` ()
60− rnf (LSLt x) = rnf x `seq` ()
61− rnf (LSLe x) = rnf x `seq` ()
62− rnf (LSGt x) = rnf x `seq` ()
63− rnf (LSGe x) = rnf x `seq` ()
64− rnf (LSExt x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
65− rnf (LZExt x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
66− rnf (LTrunc x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
67− rnf (LStrConcat) = ()
68− rnf (LStrLt) = ()
69− rnf (LStrEq) = ()
70− rnf (LStrLen) = ()
71− rnf (LIntFloat x) = rnf x `seq` ()
72− rnf (LFloatInt x) = rnf x `seq` ()
73− rnf (LIntStr x) = rnf x `seq` ()
74− rnf (LStrInt x) = rnf x `seq` ()
75− rnf (LFloatStr) = ()
76− rnf (LStrFloat) = ()
77− rnf (LChInt x) = rnf x `seq` ()
78− rnf (LIntCh x) = rnf x `seq` ()
79− rnf (LBitCast x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
80− rnf (LFExp) = ()
81− rnf (LFLog) = ()
82− rnf (LFSin) = ()
83− rnf (LFCos) = ()
84− rnf (LFTan) = ()
85− rnf (LFASin) = ()
86− rnf (LFACos) = ()
87− rnf (LFATan) = ()
88− rnf (LFSqrt) = ()
89− rnf (LFFloor) = ()
90− rnf (LFCeil) = ()
91− rnf (LFNegate) = ()
92− rnf (LStrHead) = ()
93− rnf (LStrTail) = ()
94− rnf (LStrCons) = ()
95− rnf (LStrIndex) = ()
96− rnf (LStrRev) = ()
97− rnf (LStrSubstr) = ()
98− rnf (LReadStr) = ()
99− rnf (LWriteStr) = ()
100− rnf (LSystemInfo) = ()
101− rnf (LFork) = ()
102− rnf (LPar) = ()
103− rnf (LExternal x) = rnf x `seq` ()
104− rnf (LNoOp) = ()
105−
106−instance NFData SyntaxRules where
107− rnf (SyntaxRules xs) = rnf xs `seq` ()
108−
109−instance NFData DynamicLib where
110− rnf (Lib x _) = rnf x `seq` ()
111−
112−
113−instance NFData Opt where
114− rnf (Filename str) = rnf str `seq` ()
115− rnf (Quiet) = ()
116− rnf (NoBanner) = ()
117− rnf (ColourREPL bool) = rnf bool `seq` ()
118− rnf (Idemode) = ()
119− rnf (IdemodeSocket) = ()
120− rnf (ShowLoggingCats) = ()
121− rnf (ShowLibs) = ()
122− rnf (ShowLibdir) = ()
123− rnf (ShowIncs) = ()
124− rnf (ShowPkgs) = ()
125− rnf (NoBasePkgs) = ()
126− rnf (NoPrelude) = ()
127− rnf (NoBuiltins) = ()
128− rnf (NoREPL) = ()
129− rnf (OLogging i) = rnf i `seq` ()
130− rnf (OLogCats cs) = rnf cs `seq` ()
131− rnf (Output str) = rnf str `seq` ()
132− rnf (Interface) = ()
133− rnf (TypeCase) = ()
134− rnf (TypeInType) = ()
135− rnf (DefaultTotal) = ()
136− rnf (DefaultPartial) = ()
137− rnf (WarnPartial) = ()
138− rnf (WarnReach) = ()
139− rnf (EvalTypes) = ()
140− rnf (DesugarNats) = ()
141− rnf (NoCoverage) = ()
142− rnf (ErrContext) = ()
143− rnf (ShowImpl) = ()
144− rnf (Verbose) = ()
145− rnf (Port str) = rnf str `seq` ()
146− rnf (IBCSubDir str) = rnf str `seq` ()
147− rnf (ImportDir str) = rnf str `seq` ()
148− rnf (PkgBuild str) = rnf str `seq` ()
149− rnf (PkgInstall str) = rnf str `seq` ()
150− rnf (PkgClean str) = rnf str `seq` ()
151− rnf (PkgCheck str) = rnf str `seq` ()
152− rnf (PkgREPL str) = rnf str `seq` ()
153− rnf (PkgMkDoc str) = rnf str `seq` ()
154− rnf (PkgTest str) = rnf str `seq` ()
155− rnf (PkgIndex fp) = rnf fp `seq` ()
156− rnf (WarnOnly) = ()
157− rnf (Pkg str) = rnf str `seq` ()
158− rnf (BCAsm str) = rnf str `seq` ()
159− rnf (DumpDefun str) = rnf str `seq` ()
160− rnf (DumpCases str) = rnf str `seq` ()
161− rnf (UseCodegen cg) = rnf cg `seq` ()
162− rnf (CodegenArgs str) = rnf str `seq` ()
163− rnf (OutputTy ot) = rnf ot `seq` ()
164− rnf (Extension le) = rnf le `seq` ()
165− rnf (InterpretScript str) = rnf str `seq` ()
166− rnf (EvalExpr str) = rnf str `seq` ()
167− rnf (TargetTriple str) = rnf str `seq` ()
168− rnf (TargetCPU str) = rnf str `seq` ()
169− rnf (OptLevel i) = rnf i `seq` ()
170− rnf (AddOpt o) = rnf o `seq` ()
171− rnf (RemoveOpt o) = rnf o `seq` ()
172− rnf (Client str) = rnf str `seq` ()
173− rnf (ShowOrigErr) = ()
174− rnf (AutoWidth) = ()
175− rnf (AutoSolve) = ()
176− rnf (UseConsoleWidth cw) = rnf cw `seq` ()
177− rnf DumpHighlights = ()
178− rnf NoElimDeprecationWarnings = ()
179− rnf NoOldTacticDeprecationWarnings = ()
180−
181−
182−instance NFData TIData where
183− rnf TIPartial = ()
184− rnf (TISolution xs) = rnf xs `seq` ()
185−
186−instance NFData IOption where
187− rnf (IOption
188− opt_logLevel
189− opt_logcats
190− opt_typecase
191− opt_typeintype
192− opt_coverage
193− opt_showimp
194− opt_errContext
195− opt_repl
196− opt_verbose
197− opt_nobanner
198− opt_quiet
199− opt_codegen
200− opt_outputTy
201− opt_ibcsubdir
202− opt_importdirs
203− opt_triple
204− opt_cpu
205− opt_cmdline
206− opt_origerr
207− opt_autoSolve
208− opt_autoImport
209− opt_optimise
210− opt_printdepth
211− opt_evaltypes
212− opt_desugarnats
213− opt_autoimpls) =
214− rnf opt_logLevel
215− `seq` rnf opt_typecase
216− `seq` rnf opt_typeintype
217− `seq` rnf opt_coverage
218− `seq` rnf opt_showimp
219− `seq` rnf opt_errContext
220− `seq` rnf opt_repl
221− `seq` rnf opt_verbose
222− `seq` rnf opt_nobanner
223− `seq` rnf opt_quiet
224− `seq` rnf opt_codegen
225− `seq` rnf opt_outputTy
226− `seq` rnf opt_ibcsubdir
227− `seq` rnf opt_importdirs
228− `seq` rnf opt_triple
229− `seq` rnf opt_cpu
230− `seq` rnf opt_cmdline
231− `seq` rnf opt_origerr
232− `seq` rnf opt_autoSolve
233− `seq` rnf opt_autoImport
234− `seq` rnf opt_optimise
235− `seq` rnf opt_printdepth
236− `seq` rnf opt_evaltypes
237− `seq` rnf opt_desugarnats
238− `seq` rnf opt_autoimpls
239− `seq` ()
240−
241−instance NFData LanguageExt where
242− rnf TypeProviders = ()
243− rnf ErrorReflection = ()
244−
245−instance NFData Optimisation where
246− rnf PETransform = ()
247−
248−instance NFData ColourTheme where
249− rnf (ColourTheme keywordColour
250− boundVarColour
251− implicitColour
252− functionColour
253− typeColour
254− dataColour
255− promptColour
256− postulateColour) =
257− rnf keywordColour
258− `seq` rnf boundVarColour
259− `seq` rnf implicitColour
260− `seq` rnf functionColour
261− `seq` rnf typeColour
262− `seq` rnf dataColour
263− `seq` rnf promptColour
264− `seq` rnf postulateColour
265− `seq` ()
266−
267−instance NFData IdrisColour where
268− rnf (IdrisColour _ x2 x3 x4 x5) = rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` ()
269−
270−instance NFData OutputType where
271− rnf Raw = ()
272− rnf Object = ()
273− rnf Executable = ()
274−
275−instance NFData IBCWrite where
276− rnf (IBCFix fixDecl) = rnf fixDecl `seq` ()
277− rnf (IBCImp name) = rnf name `seq` ()
278− rnf (IBCStatic name) = rnf name `seq` ()
279− rnf (IBCClass name) = rnf name `seq` ()
280− rnf (IBCInstance b1 b2 n1 n2) = rnf b1 `seq` rnf b2 `seq` rnf n1 `seq` rnf n2 `seq` ()
281− rnf (IBCDSL name) = rnf name `seq` ()
282− rnf (IBCData name) = rnf name `seq` ()
283− rnf (IBCOpt name) = rnf name `seq` ()
284− rnf (IBCMetavar name) = rnf name `seq` ()
285− rnf (IBCSyntax syntax) = rnf syntax `seq` ()
286− rnf (IBCKeyword string) = rnf string `seq` ()
287− rnf (IBCImport imp) = rnf imp `seq` ()
288− rnf (IBCImportDir filePath) = rnf filePath `seq` ()
289− rnf (IBCObj codegen filePath) = rnf codegen `seq` rnf filePath `seq` ()
290− rnf (IBCLib codegen string) = rnf codegen `seq` rnf string `seq` ()
291− rnf (IBCCGFlag codegen string) = rnf codegen `seq` rnf string `seq` ()
292− rnf (IBCDyLib string) = rnf string `seq` ()
293− rnf (IBCHeader codegen string) = rnf codegen `seq` rnf string `seq` ()
294− rnf (IBCAccess name accessibility) = rnf name `seq` rnf accessibility `seq` ()
295− rnf (IBCMetaInformation name metaInformation) = rnf name `seq` rnf metaInformation `seq` ()
296− rnf (IBCTotal name totality) = rnf name `seq` rnf totality `seq` ()
297− rnf (IBCInjective name inj) = rnf name `seq` rnf inj `seq` ()
298− rnf (IBCFlags name fnOpts) = rnf name `seq` rnf fnOpts `seq` ()
299− rnf (IBCFnInfo name fnInfo) = rnf name `seq` rnf fnInfo `seq` ()
300− rnf (IBCTrans name terms) = rnf name `seq` rnf terms `seq` ()
301− rnf (IBCErrRev terms) = rnf terms `seq` ()
302− rnf (IBCCG name) = rnf name `seq` ()
303− rnf (IBCDoc name) = rnf name `seq` ()
304− rnf (IBCCoercion name) = rnf name `seq` ()
305− rnf (IBCDef name) = rnf name `seq` ()
306− rnf (IBCNameHint names) = rnf names `seq` ()
307− rnf (IBCLineApp filePath int pTerm) = rnf filePath `seq` rnf int `seq` rnf pTerm `seq` ()
308− rnf (IBCErrorHandler name) = rnf name `seq` ()
309− rnf (IBCFunctionErrorHandler n1 n2 n3) = rnf n1 `seq` rnf n2 `seq` rnf n3 `seq` ()
310− rnf (IBCPostulate name) = rnf name `seq` ()
311− rnf (IBCExtern extern) = rnf extern `seq` ()
312− rnf (IBCTotCheckErr fc string) = rnf fc `seq` rnf string `seq` ()
313− rnf (IBCParsedRegion fc) = rnf fc `seq` ()
314− rnf (IBCModDocs name) = rnf name `seq` ()
315− rnf (IBCUsage usage) = rnf usage `seq` ()
316− rnf (IBCExport name) = rnf name `seq` ()
317− rnf (IBCAutoHint n1 n2) = rnf n1 `seq` rnf n2 `seq` ()
318− rnf (IBCDeprecate n1 n2) = rnf n1 `seq` rnf n2 `seq` ()
319− rnf (IBCRecord x) = rnf x `seq` ()
320− rnf (IBCFragile n1 n2) = rnf n1 `seq` rnf n2 `seq` ()
321− rnf (IBCConstraint n1 n2) = rnf n1 `seq` rnf n2 `seq` ()
322−
323−
324−instance NFData a => NFData (D.Block a) where
325− rnf (D.Para lines) = rnf lines `seq` ()
326− rnf (D.Header i lines) = rnf i `seq` rnf lines `seq` ()
327− rnf (D.Blockquote bs) = rnf bs `seq` ()
328− rnf (D.List b t xs) = rnf b `seq` rnf t `seq` rnf xs `seq` ()
329− rnf (D.CodeBlock attr txt tm) = rnf attr `seq` rnf txt `seq` ()
330− rnf (D.HtmlBlock txt) = rnf txt `seq` ()
331− rnf D.HRule = ()
332−
333−instance NFData a => NFData (D.Inline a) where
334− rnf (D.Str txt) = rnf txt `seq` ()
335− rnf D.Space = ()
336− rnf D.SoftBreak = ()
337− rnf D.LineBreak = ()
338− rnf (D.Emph xs) = rnf xs `seq` ()
339− rnf (D.Strong xs) = rnf xs `seq` ()
340− rnf (D.Code xs tm) = rnf xs `seq` rnf tm `seq` ()
341− rnf (D.Link a b xs) = rnf a `seq` rnf b `seq` rnf xs `seq` ()
342− rnf (D.Image a b c) = rnf a `seq` rnf b `seq` rnf c `seq` ()
343− rnf (D.Entity a) = rnf a `seq` ()
344− rnf (D.RawHtml x) = rnf x `seq` ()
345−
34633instance NFData CT.ListType where
34734 rnf (CT.Bullet c) = rnf c `seq` ()
34835 rnf (CT.Numbered nw i) = rnf nw `seq` rnf i `seq` ()
@@ -354,373 +41,65 @@ instance NFData CT.NumWrapper where
35441 rnf CT.PeriodFollowing = ()
35542 rnf CT.ParenFollowing = ()
35643
357−instance NFData DocTerm where
358− rnf Unchecked = ()
359− rnf (Checked x1) = rnf x1 `seq` ()
360− rnf (Example x1) = rnf x1 `seq` ()
361− rnf (Failing x1) = rnf x1 `seq` ()
362−
363−-- All generated by 'derive'
364−
365−instance NFData SizeChange where
366− rnf Smaller = ()
367− rnf Same = ()
368− rnf Bigger = ()
369− rnf Unknown = ()
370−
371−instance NFData FnInfo where
372− rnf (FnInfo x1) = rnf x1 `seq` ()
373−
374−instance NFData Codegen where
375− rnf (Via x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
376− rnf Bytecode = ()
377−
378−instance NFData IRFormat where
379− rnf _ = ()
380−
381−instance NFData LogCat where
382− rnf _ = ()
383−
384−instance NFData CGInfo where
385− rnf (CGInfo x1 x2 x3)
386− = rnf x1 `seq`
387− rnf x2 `seq` rnf x3 `seq` ()
388−
389−instance NFData Fixity where
390− rnf (Infixl x1) = rnf x1 `seq` ()
391− rnf (Infixr x1) = rnf x1 `seq` ()
392− rnf (InfixN x1) = rnf x1 `seq` ()
393− rnf (PrefixN x1) = rnf x1 `seq` ()
394−
395−instance NFData FixDecl where
396− rnf (Fix x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
397−
398−instance NFData Static where
399− rnf Static = ()
400− rnf Dynamic = ()
401−
402−instance NFData ArgOpt where
403− rnf _ = ()
404−
405−instance NFData Plicity where
406− rnf (Imp x1 x2 x3 x4 x5)
407− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` ()
408− rnf (Exp x1 x2 x3)
409− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
410− rnf (Constraint x1 x2)
411− = rnf x1 `seq` rnf x2 `seq` ()
412− rnf (TacImp x1 x2 x3)
413− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
414−
415−instance NFData FnOpt where
416− rnf Inlinable = ()
417− rnf TotalFn = ()
418− rnf PartialFn = ()
419− rnf CoveringFn = ()
420− rnf Coinductive = ()
421− rnf AssertTotal = ()
422− rnf Dictionary = ()
423− rnf Implicit = ()
424− rnf NoImplicit = ()
425− rnf (CExport x1) = rnf x1 `seq` ()
426− rnf ErrorHandler = ()
427− rnf ErrorReverse = ()
428− rnf Reflection = ()
429− rnf (Specialise x1) = rnf x1 `seq` ()
430− rnf Constructor = ()
431− rnf AutoHint = ()
432− rnf PEGenerated = ()
433−
434−instance NFData DataOpt where
435− rnf Codata = ()
436− rnf DefaultEliminator = ()
437− rnf DefaultCaseFun = ()
438− rnf DataErrRev = ()
439−
440−instance (NFData t) => NFData (PDecl' t) where
441− rnf (PFix x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
442− rnf (PTy x1 x2 x3 x4 x5 x6 x7 x8)
443− = rnf x1 `seq`
444− rnf x2 `seq`
445− rnf x3 `seq`
446− rnf x4 `seq`
447− rnf x5 `seq` rnf x6 `seq` rnf x7 `seq` rnf x8 `seq` ()
448− rnf (PPostulate x1 x2 x3 x4 x5 x6 x7 x8)
449− = rnf x1 `seq`
450− rnf x2 `seq`
451− rnf x3 `seq`
452− rnf x4 `seq`
453− rnf x5 `seq` rnf x6 `seq` rnf x7 `seq` rnf x8 `seq` ()
454− rnf (PClauses x1 x2 x3 x4)
455− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
456− rnf (PCAF x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
457− rnf (PData x1 x2 x3 x4 x5 x6)
458− = rnf x1 `seq`
459− rnf x2 `seq`
460− rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` rnf x6 `seq` ()
461− rnf (PParams x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
462− rnf (POpenInterfaces x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
463− rnf (PNamespace x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
464− rnf (PRecord x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12)
465− = rnf x1 `seq`
466− rnf x2 `seq`
467− rnf x3 `seq`
468− rnf x4 `seq`
469− rnf x5 `seq`
470− rnf x6 `seq`
471− rnf x7 `seq`
472− rnf x8 `seq`
473− rnf x9 `seq`
474− rnf x10 `seq` rnf x11 `seq` rnf x12 `seq` ()
475− rnf (PClass x1 x2 x3 x4 x5 x6 x8 x7 x9 x10 x11 x12)
476− = rnf x1 `seq`
477− rnf x2 `seq`
478− rnf x3 `seq`
479− rnf x4 `seq`
480− rnf x5 `seq`
481− rnf x6 `seq`
482− rnf x7 `seq`
483− rnf x8 `seq`
484− rnf x9 `seq`
485− rnf x10 `seq`
486− rnf x11 `seq` rnf x12 `seq` ()
487− rnf (PInstance x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15)
488− = rnf x1 `seq`
489− rnf x2 `seq`
490− rnf x3 `seq`
491− rnf x4 `seq`
492− rnf x5 `seq`
493− rnf x6 `seq`
494− rnf x7 `seq`
495− rnf x8 `seq`
496− rnf x9 `seq` rnf x10 `seq` rnf x11 `seq` rnf x12 `seq` rnf x13 `seq` rnf x14 `seq` rnf x15 `seq` ()
497− rnf (PDSL x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
498− rnf (PSyntax x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
499− rnf (PMutual x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
500− rnf (PDirective x1) = ()
501− rnf (PProvider x1 x2 x3 x4 x5 x6)
502− = rnf x1 `seq`
503− rnf x2 `seq`
504− rnf x3 `seq`
505− rnf x4 `seq`
506− rnf x5 `seq` rnf x6 `seq` ()
507− rnf (PTransform x1 x2 x3 x4)
508− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
509− rnf (PRunElabDecl x1 x2 x3)
510− = rnf x1 `seq` rnf x2 `seq` x3 `seq` ()
511−
512−instance NFData t => NFData (ProvideWhat' t) where
513− rnf (ProvTerm ty tm) = rnf ty `seq` rnf tm `seq` ()
514− rnf (ProvPostulate tm) = rnf tm `seq` ()
515−
516−instance NFData PunInfo where
517− rnf x = x `seq` ()
518−
519−instance (NFData t) => NFData (PClause' t) where
520− rnf (PClause x1 x2 x3 x4 x5 x6)
521− = rnf x1 `seq`
522− rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` rnf x6 `seq` ()
523− rnf (PWith x1 x2 x3 x4 x5 x6 x7)
524− = rnf x1 `seq`
525− rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` rnf x6 `seq` rnf x7 `seq` ()
526− rnf (PClauseR x1 x2 x3 x4)
527− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
528− rnf (PWithR x1 x2 x3 x4 x5)
529− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` ()
530−
531−instance (NFData t) => NFData (PData' t) where
532− rnf (PDatadecl x1 x2 x3 x4)
533− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
534− rnf (PLaterdecl x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
535−
536−instance NFData PTerm where
537− rnf (PQuote x1) = rnf x1 `seq` ()
538− rnf (PRef x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` x3 `seq` ()
539− rnf (PInferRef x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` x3 `seq` ()
540− rnf (PPatvar x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
541− rnf (PLam _ x1 x2 x3 x4) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
542− rnf (PPi x1 x2 x3 x4 x5)
543− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` ()
544− rnf (PLet _ x1 x2 x3 x4 x5)
545− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` ()
546− rnf (PTyped x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
547− rnf (PAppImpl x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
548− rnf (PApp x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
549− rnf (PWithApp x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
550− rnf (PAppBind x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
551− rnf (PMatchApp x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
552− rnf (PCase x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
553− rnf (PIfThenElse x1 x2 x3 x4) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
554− rnf (PTrue x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
555− rnf (PResolveTC x1) = rnf x1 `seq` ()
556− rnf (PRewrite x1 x2 x3 x4 x5)
557− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` ()
558− rnf (PPair x1 x2 x3 x4 x5) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` x5 `seq` ()
559− rnf (PDPair x1 x2 x3 x4 x5 x6)
560− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` x6 `seq` ()
561− rnf (PAs x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
562− rnf (PAlternative x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
563− rnf (PHidden x1) = rnf x1 `seq` ()
564− rnf (PType fc) = rnf fc `seq` ()
565− rnf (PUniverse _) = ()
566− rnf (PGoal x1 x2 x3 x4)
567− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
568− rnf (PConstant x1 x2) = x1 `seq` x2 `seq` ()
569− rnf Placeholder = ()
570− rnf (PDoBlock x1) = rnf x1 `seq` ()
571− rnf (PIdiom x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
572− rnf (PReturn x1) = rnf x1 `seq` ()
573− rnf (PMetavar x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
574− rnf (PProof x1) = rnf x1 `seq` ()
575− rnf (PTactics x1) = rnf x1 `seq` ()
576− rnf (PElabError x1) = rnf x1 `seq` ()
577− rnf PImpossible = ()
578− rnf (PCoerced x1) = rnf x1 `seq` ()
579− rnf (PDisamb x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
580− rnf (PUnifyLog x1) = rnf x1 `seq` ()
581− rnf (PNoImplicits x1) = rnf x1 `seq` ()
582− rnf (PQuasiquote x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
583− rnf (PUnquote x1) = rnf x1 `seq` ()
584− rnf (PQuoteName x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
585− rnf (PRunElab x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
586− rnf (PConstSugar x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
587−
588−instance NFData PAltType where
589− rnf (ExactlyOne x1) = rnf x1 `seq` ()
590− rnf FirstSuccess = ()
591− rnf TryImplicit = ()
592−
593−instance (NFData t) => NFData (PTactic' t) where
594− rnf (Intro x1) = rnf x1 `seq` ()
595− rnf Intros = ()
596− rnf (Focus x1) = rnf x1 `seq` ()
597− rnf (Refine x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
598− rnf (Rewrite x1) = rnf x1 `seq` ()
599− rnf DoUnify = ()
600− rnf (Induction x1) = rnf x1 `seq` ()
601− rnf (CaseTac x1) = rnf x1 `seq` ()
602− rnf (Equiv x1) = rnf x1 `seq` ()
603− rnf (Claim x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
604− rnf (MatchRefine x1) = rnf x1 `seq` ()
605− rnf (LetTac x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
606− rnf (LetTacTy x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
607− rnf (Exact x1) = rnf x1 `seq` ()
608− rnf Compute = ()
609− rnf Trivial = ()
610− rnf TCInstance = ()
611− rnf (ProofSearch r r1 r2 x1 x2 x3)
612− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
613− rnf Solve = ()
614− rnf Attack = ()
615− rnf ProofState = ()
616− rnf ProofTerm = ()
617− rnf Undo = ()
618− rnf (Try x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
619− rnf (TSeq x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
620− rnf (ApplyTactic x1) = rnf x1 `seq` ()
621− rnf (ByReflection x1) = rnf x1 `seq` ()
622− rnf (Reflect x1) = rnf x1 `seq` ()
623− rnf (Fill x1) = rnf x1 `seq` ()
624− rnf (GoalType x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
625− rnf Qed = ()
626− rnf Abandon = ()
627− rnf (TCheck x1) = rnf x1 `seq` ()
628− rnf (TEval x1) = rnf x1 `seq` ()
629− rnf (TDocStr x1) = x1 `seq` ()
630− rnf (TSearch x1) = rnf x1 `seq` ()
631− rnf Skip = ()
632− rnf (TFail x1) = rnf x1 `seq` ()
633− rnf SourceFC = ()
634− rnf Unfocus = ()
635−
636−instance (NFData t) => NFData (PDo' t) where
637− rnf (DoExp x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
638− rnf (DoBind x1 x2 x3 x4) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
639− rnf (DoBindP x1 x2 x3 x4) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
640− rnf (DoLet x1 x2 x3 x4 x5)
641− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` ()
642− rnf (DoLetP x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
643−
644−instance (NFData t) => NFData (PArg' t) where
645− rnf (PImp x1 x2 x3 x4 x5)
646− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` ()
647− rnf (PExp x1 x2 x3 x4)
648− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
649− rnf (PConstraint x1 x2 x3 x4)
650− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` ()
651− rnf (PTacImplicit x1 x2 x3 x4 x5)
652− = rnf x1 `seq`
653− rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` ()
654−
655−instance NFData ClassInfo where
656− rnf (CI x1 x2 x3 x4 x5 x6 x7)
657− = rnf x1 `seq`
658− rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` rnf x6 `seq` rnf x7 `seq` ()
659−
660−instance NFData RecordInfo where
661− rnf (RI x1 x2 x3)
662− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
663−
664−instance NFData OptInfo where
665− rnf (Optimise x1 x2)
666− = rnf x1 `seq` rnf x2 `seq` ()
667−
668−instance NFData TypeInfo where
669− rnf (TI x1 x2 x3 x4 x5) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` ()
670−
671−instance (NFData t) => NFData (DSL' t) where
672− rnf (DSL x1 x2 x3 x4 x5 x6 x7 x8 x9 x10)
673− = rnf x1 `seq`
674− rnf x2 `seq`
675− rnf x3 `seq`
676− rnf x4 `seq`
677− rnf x5 `seq`
678− rnf x6 `seq` rnf x7 `seq` rnf x8 `seq` rnf x9 `seq` rnf x10 `seq` ()
679−
680−instance NFData SynContext where
681− rnf PatternSyntax = ()
682− rnf TermSyntax = ()
683− rnf AnySyntax = ()
684−
685−instance NFData Syntax where
686− rnf (Rule x1 x2 x3) = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` ()
687− rnf (DeclRule x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
688−
689−instance NFData SSymbol where
690− rnf (Keyword x1) = rnf x1 `seq` ()
691− rnf (Symbol x1) = rnf x1 `seq` ()
692− rnf (Binding x1) = rnf x1 `seq` ()
693− rnf (Expr x1) = rnf x1 `seq` ()
694− rnf (SimpleExpr x1) = rnf x1 `seq` ()
695−
696−instance NFData Using where
697− rnf (UImplicit x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
698− rnf (UConstraint x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
44+instance NFData DynamicLib where
45+ rnf (Lib x _) = rnf x `seq` ()
69946
700−instance NFData SyntaxInfo where
701− rnf (Syn x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15)
702− = rnf x1 `seq`
703− rnf x2 `seq`
704− rnf x3 `seq`
705− rnf x4 `seq`
706− rnf x5 `seq`
707− rnf x6 `seq` rnf x7 `seq` rnf x8 `seq` rnf x9 `seq` rnf x10 `seq` rnf x11 `seq` rnf x12 `seq` rnf x13 `seq` rnf x14 `seq` rnf x15 `seq` ()
47+instance NFData IdrisColour where
48+ rnf (IdrisColour _ x2 x3 x4 x5) = rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` ()
70849
50+-- Handle doesn't have an NFData instance
70951instance NFData OutputMode where
710− rnf (RawOutput x) = () -- no instance for Handle, so this is a bit wrong
52+ rnf (RawOutput x) = ()
71153 rnf (IdeMode x y) = rnf x `seq` ()
71254
713−instance NFData DefaultTotality where
714− rnf DefaultCheckingTotal = ()
715− rnf DefaultCheckingPartial = ()
716− rnf DefaultCheckingCovering = ()
717−
718−instance NFData IState where
719− rnf (IState x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20
720− x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 x37 x38 x39 x40
721− x41 x42 x43 x44 x45 x46 x47 x48 x49 x50 x51 x52 x53 x54 x55 x56 x57 x58 x59 x60
722− x61 x62 x63 x64 x65 x66 x67 x68 x69 x70 x71 x72 x73 x74 x75 x76 x77)
723− = rnf x1 `seq` rnf x2 `seq` rnf x3 `seq` rnf x4 `seq` rnf x5 `seq` rnf x6 `seq` rnf x7 `seq` rnf x8 `seq` rnf x9 `seq` rnf x10 `seq` () `seq` rnf x11 `seq` rnf x12 `seq` rnf x13 `seq` rnf x14 `seq` rnf x15 `seq` rnf x16 `seq` rnf x17 `seq` rnf x18 `seq` rnf x19 `seq` rnf x20 `seq`
724− rnf x21 `seq` rnf x22 `seq` rnf x23 `seq` rnf x24 `seq` rnf x25 `seq` rnf x26 `seq` rnf x27 `seq` rnf x28 `seq` rnf x29 `seq` rnf x30 `seq` rnf x31 `seq` rnf x32 `seq` rnf x33 `seq` rnf x34 `seq` rnf x35 `seq` rnf x36 `seq` rnf x37 `seq` rnf x38 `seq` rnf x39 `seq` rnf x40 `seq`
725− rnf x41 `seq` rnf x42 `seq` rnf x43 `seq` rnf x44 `seq` rnf x45 `seq` rnf x46 `seq` rnf x47 `seq` rnf x48 `seq` rnf x49 `seq` rnf x50 `seq` rnf x51 `seq` rnf x52 `seq` rnf x53 `seq` rnf x54 `seq` rnf x55 `seq` rnf x56 `seq` rnf x57 `seq` rnf x58 `seq` rnf x59 `seq` rnf x60 `seq`
726− rnf x61 `seq` rnf x62 `seq` rnf x63 `seq` rnf x64 `seq` rnf x65 `seq` rnf x66 `seq` rnf x67 `seq` rnf x68 `seq` rnf x69 `seq` rnf x70 `seq` rnf x71 `seq` rnf x72 `seq` rnf x73 `seq` rnf x74 `seq` rnf x75 `seq` rnf x76 `seq` rnf x77 `seq` ()
55+instance NFData a => NFData (D.Docstring a)
56+instance NFData ConsoleWidth
57+instance NFData PrimFn
58+instance NFData SyntaxRules
59+instance NFData Opt
60+instance NFData TIData
61+instance NFData IOption
62+instance NFData LanguageExt
63+instance NFData Optimisation
64+instance NFData ColourTheme
65+instance NFData OutputType
66+instance NFData IBCWrite
67+instance NFData a => NFData (D.Block a)
68+instance NFData a => NFData (D.Inline a)
69+instance NFData DocTerm
70+instance NFData SizeChange
71+instance NFData FnInfo
72+instance NFData Codegen
73+instance NFData IRFormat
74+instance NFData LogCat
75+instance NFData CGInfo
76+instance NFData Fixity
77+instance NFData FixDecl
78+instance NFData Static
79+instance NFData ArgOpt
80+instance NFData Plicity
81+instance NFData FnOpt
82+instance NFData DataOpt
83+instance NFData Directive
84+instance (NFData t) => NFData (PDecl' t)
85+instance NFData t => NFData (ProvideWhat' t)
86+instance NFData PunInfo
87+instance (NFData t) => NFData (PClause' t)
88+instance (NFData t) => NFData (PData' t)
89+instance NFData PTerm
90+instance NFData PAltType
91+instance (NFData t) => NFData (PTactic' t)
92+instance (NFData t) => NFData (PDo' t)
93+instance (NFData t) => NFData (PArg' t)
94+instance NFData ClassInfo
95+instance NFData RecordInfo
96+instance NFData OptInfo
97+instance NFData TypeInfo
98+instance (NFData t) => NFData (DSL' t)
99+instance NFData SynContext
100+instance NFData Syntax
101+instance NFData SSymbol
102+instance NFData Using
103+instance NFData SyntaxInfo
104+instance NFData DefaultTotality
105+instance NFData IState
src/Idris/Docstrings.hs+6−6
@@ -6,7 +6,7 @@ License : BSD3
66Maintainer : The Idris Community.
77-}
88
9−{-# LANGUAGE DeriveFunctor, ScopedTypeVariables #-}
9+{-# LANGUAGE DeriveFunctor, DeriveGeneric, ScopedTypeVariables #-}
1010{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}
1111module Idris.Docstrings (
1212 Docstring(..), Block(..), Inline(..), parseDocstring, renderDocstring
@@ -30,7 +30,7 @@ import Data.Foldable (Foldable)
3030import Data.Traversable (Traversable)
3131import qualified Data.Sequence as S
3232
33−import Control.DeepSeq (NFData(..))
33+import GHC.Generics (Generic)
3434
3535import Text.Blaze.Html (Html)
3636
@@ -39,7 +39,7 @@ data DocTerm = Unchecked
3939 | Checked Term
4040 | Example Term
4141 | Failing Err
42− deriving Show
42+ deriving (Show, Generic)
4343
4444-- | Render a term in the documentation
4545renderDocTerm :: (Term -> Doc OutputAnnotation) -> (Term -> Term) -> DocTerm -> String -> Doc OutputAnnotation
@@ -53,7 +53,7 @@ renderDocTerm pp norm (Failing err) src = annotate (AnnErr err) $ text src
5353-- | Representation of Idris's inline documentation. The type paramter
5454-- represents the type of terms that are associated with code blocks.
5555data Docstring a = DocString CT.Options (Blocks a)
56− deriving (Show, Functor, Foldable, Traversable)
56+ deriving (Show, Functor, Foldable, Traversable, Generic)
5757
5858type Blocks a = S.Seq (Block a)
5959
@@ -65,7 +65,7 @@ data Block a = Para (Inlines a)
6565 | CodeBlock CT.CodeAttr T.Text a
6666 | HtmlBlock T.Text
6767 | HRule
68− deriving (Show, Functor, Foldable, Traversable)
68+ deriving (Show, Functor, Foldable, Traversable, Generic)
6969
7070data Inline a = Str T.Text
7171 | Space
@@ -78,7 +78,7 @@ data Inline a = Str T.Text
7878 | Image (Inlines a) T.Text T.Text
7979 | Entity T.Text
8080 | RawHtml T.Text
81− deriving (Show, Functor, Foldable, Traversable)
81+ deriving (Show, Functor, Foldable, Traversable, Generic)
8282
8383type Inlines a = S.Seq (Inline a)
8484