1{-# LANGUAGE CPP #-} 2{-# LANGUAGE FlexibleInstances #-} 3#if defined(__GLASGOW_HASKELL__) 4{-# LANGUAGE Trustworthy #-} 5#endif 6{-# LANGUAGE Rank2Types #-} 7 8#include "lens-common.h" 9 10----------------------------------------------------------------------------- 11-- | 12-- Module : Language.Haskell.TH.Lens 13-- Copyright : (C) 2012-2016 Edward Kmett 14-- License : BSD-style (see the file LICENSE) 15-- Maintainer : Edward Kmett <ekmett@gmail.com> 16-- Stability : experimental 17-- Portability : TemplateHaskell 18-- 19-- Lenses, Prisms, and Traversals for working with Template Haskell. 20-- 21-- Beware that the API offered in this module is subject to change, as it 22-- mirrors the API exposed by the @template-haskell@ package, which 23-- frequently changes between different releases of GHC. An effort is made 24-- to identify the functions in this module which have different type 25-- signatures when compiled with different versions of @template-haskell@. 26---------------------------------------------------------------------------- 27module Language.Haskell.TH.Lens 28 ( 29 -- * Traversals 30 HasName(..) 31 , HasTypes(..) 32 , HasTypeVars(..) 33 , SubstType(..) 34 , typeVars -- :: HasTypeVars t => Traversal' t Name 35 , substTypeVars -- :: HasTypeVars t => Map Name Name -> t -> t 36 , conFields 37 , conNamedFields 38 -- * Lenses 39 -- ** Loc Lenses 40 , locFileName 41 , locPackage 42 , locModule 43 , locStart 44 , locEnd 45 -- ** FunDep Lenses 46 , funDepInputs 47 , funDepOutputs 48 -- ** Match Lenses 49 , matchPattern 50 , matchBody 51 , matchDeclarations 52 -- ** Fixity Lenses 53 , fixityPrecedence 54 , fixityDirection 55 -- ** Clause Lenses 56 , clausePattern 57 , clauseBody 58 , clauseDecs 59 -- ** FieldExp Lenses 60 , fieldExpName 61 , fieldExpExpression 62 -- ** FieldPat Lenses 63 , fieldPatName 64 , fieldPatPattern 65 -- ** TySynEqn Lenses 66# if MIN_VERSION_template_haskell(2,15,0) 67 , tySynEqnLHS 68# endif 69 , tySynEqnPatterns 70 , tySynEqnResult 71#if MIN_VERSION_template_haskell(2,11,0) 72 -- ** InjectivityAnn Lenses 73 , injectivityAnnOutput 74 , injectivityAnnInputs 75 -- ** TypeFamilyHead Lenses 76 , typeFamilyHeadName 77 , typeFamilyHeadTyVarBndrs 78 , typeFamilyHeadResultSig 79 , typeFamilyHeadInjectivityAnn 80 -- ** Bang Lenses 81 , bangSourceUnpackedness 82 , bangSourceStrictness 83#endif 84#if MIN_VERSION_template_haskell(2,12,0) 85 -- ** DerivClause Lenses 86 , derivClauseStrategy 87 , derivClauseCxt 88#endif 89 -- * Prisms 90 -- ** Info Prisms 91 , _ClassI 92 , _ClassOpI 93 , _TyConI 94 , _FamilyI 95 , _PrimTyConI 96 , _DataConI 97 , _VarI 98 , _TyVarI 99#if MIN_VERSION_template_haskell(2,12,0) 100 , _PatSynI 101#endif 102 -- ** Dec Prisms 103 , _FunD 104 , _ValD 105 , _DataD 106 , _NewtypeD 107 , _TySynD 108 , _ClassD 109 , _InstanceD 110 , _SigD 111 , _ForeignD 112 , _InfixD 113 , _PragmaD 114 , _DataInstD 115 , _NewtypeInstD 116 , _TySynInstD 117 , _ClosedTypeFamilyD 118 , _RoleAnnotD 119#if MIN_VERSION_template_haskell(2,10,0) 120 , _StandaloneDerivD 121 , _DefaultSigD 122#endif 123#if MIN_VERSION_template_haskell(2,11,0) 124 , _DataFamilyD 125 , _OpenTypeFamilyD 126#else 127 , _FamilyD 128#endif 129#if MIN_VERSION_template_haskell(2,12,0) 130 , _PatSynD 131 , _PatSynSigD 132#endif 133#if MIN_VERSION_template_haskell(2,15,0) 134 , _ImplicitParamBindD 135#endif 136#if MIN_VERSION_template_haskell(2,12,0) 137 -- ** PatSynDir Prisms 138 , _Unidir 139 , _ImplBidir 140 , _ExplBidir 141 -- ** PatSynArgs Prisms 142 , _PrefixPatSyn 143 , _InfixPatSyn 144 , _RecordPatSyn 145#endif 146 -- ** Con Prisms 147 , _NormalC 148 , _RecC 149 , _InfixC 150 , _ForallC 151#if MIN_VERSION_template_haskell(2,11,0) 152 , _GadtC 153 , _RecGadtC 154#endif 155#if MIN_VERSION_template_haskell(2,11,0) 156 -- ** Overlap Prisms 157 ,_Overlappable 158 ,_Overlapping 159 ,_Overlaps 160 ,_Incoherent 161#endif 162#if MIN_VERSION_template_haskell(2,11,0) 163 -- ** SourceUnpackedness Prisms 164 , _NoSourceUnpackedness 165 , _SourceNoUnpack 166 , _SourceUnpack 167 -- ** SourceStrictness Prisms 168 , _NoSourceStrictness 169 , _SourceLazy 170 , _SourceStrict 171 -- ** DecidedStrictness Prisms 172 , _DecidedLazy 173 , _DecidedStrict 174 , _DecidedUnpack 175#else 176 -- ** Strict Prisms 177 , _IsStrict 178 , _NotStrict 179 , _Unpacked 180#endif 181 -- ** Foreign Prisms 182 , _ImportF 183 , _ExportF 184 -- ** Callconv Prisms 185 , _CCall 186 , _StdCall 187#if MIN_VERSION_template_haskell(2,10,0) 188 , _CApi 189 , _Prim 190 , _JavaScript 191#endif 192 -- ** Safety Prisms 193 , _Unsafe 194 , _Safe 195 , _Interruptible 196 -- ** Pragma Prisms 197 , _InlineP 198 , _SpecialiseP 199 , _SpecialiseInstP 200 , _RuleP 201 , _AnnP 202#if MIN_VERSION_template_haskell(2,10,0) 203 , _LineP 204#endif 205#if MIN_VERSION_template_haskell(2,12,0) 206 , _CompleteP 207#endif 208 -- ** Inline Prisms 209 , _NoInline 210 , _Inline 211 , _Inlinable 212 -- ** RuleMatch Prisms 213 , _ConLike 214 , _FunLike 215 -- ** Phases Prisms 216 , _AllPhases 217 , _FromPhase 218 , _BeforePhase 219 -- ** RuleBndr Prisms 220 , _RuleVar 221 , _TypedRuleVar 222 -- ** AnnTarget Prisms 223 , _ModuleAnnotation 224 , _TypeAnnotation 225 , _ValueAnnotation 226 -- ** FunDep Prisms TODO make a lens 227 , _FunDep 228#if !(MIN_VERSION_template_haskell(2,13,0)) 229 -- ** FamFlavour Prisms 230 , _TypeFam 231 , _DataFam 232#endif 233 -- ** FixityDirection Prisms 234 , _InfixL 235 , _InfixR 236 , _InfixN 237 -- ** Exp Prisms 238 , _VarE 239 , _ConE 240 , _LitE 241 , _AppE 242#if MIN_VERSION_template_haskell(2,12,0) 243 , _AppTypeE 244#endif 245 , _InfixE 246 , _UInfixE 247 , _ParensE 248 , _LamE 249 , _LamCaseE 250 , _TupE 251 , _UnboxedTupE 252#if MIN_VERSION_template_haskell(2,12,0) 253 , _UnboxedSumE 254#endif 255 , _CondE 256 , _MultiIfE 257 , _LetE 258 , _CaseE 259 , _DoE 260 , _CompE 261 , _ArithSeqE 262 , _ListE 263 , _SigE 264 , _RecConE 265 , _RecUpdE 266#if MIN_VERSION_template_haskell(2,10,0) 267 , _StaticE 268#endif 269#if MIN_VERSION_template_haskell(2,11,0) 270 , _UnboundVarE 271#endif 272#if MIN_VERSION_template_haskell(2,13,0) 273 , _LabelE 274#endif 275#if MIN_VERSION_template_haskell(2,15,0) 276 , _MDoE 277 , _ImplicitParamVarE 278#endif 279 -- ** Body Prisms 280 , _GuardedB 281 , _NormalB 282 -- ** Guard Prisms 283 , _NormalG 284 , _PatG 285 -- ** Stmt Prisms 286 , _BindS 287 , _LetS 288 , _NoBindS 289 , _ParS 290#if MIN_VERSION_template_haskell(2,15,0) 291 , _RecS 292#endif 293 -- ** Range Prisms 294 , _FromR 295 , _FromThenR 296 , _FromToR 297 , _FromThenToR 298 -- ** Lit Prisms 299 , _CharL 300 , _StringL 301 , _IntegerL 302 , _RationalL 303 , _IntPrimL 304 , _WordPrimL 305 , _FloatPrimL 306 , _DoublePrimL 307 , _StringPrimL 308#if MIN_VERSION_template_haskell(2,11,0) 309 , _CharPrimL 310#endif 311#if MIN_VERSION_template_haskell(2,16,0) 312 , _BytesPrimL 313#endif 314 -- ** Pat Prisms 315 , _LitP 316 , _VarP 317 , _TupP 318 , _UnboxedTupP 319#if MIN_VERSION_template_haskell(2,12,0) 320 , _UnboxedSumP 321#endif 322 , _ConP 323 , _InfixP 324 , _UInfixP 325 , _ParensP 326 , _TildeP 327 , _BangP 328 , _AsP 329 , _WildP 330 , _RecP 331 , _ListP 332 , _SigP 333 , _ViewP 334 -- ** Type Prisms 335 , _ForallT 336 , _AppT 337 , _SigT 338 , _VarT 339 , _ConT 340 , _PromotedT 341 , _TupleT 342 , _UnboxedTupleT 343#if MIN_VERSION_template_haskell(2,12,0) 344 , _UnboxedSumT 345#endif 346 , _ArrowT 347#if MIN_VERSION_template_haskell(2,10,0) 348 , _EqualityT 349#endif 350 , _ListT 351 , _PromotedTupleT 352 , _PromotedNilT 353 , _PromotedConsT 354 , _StarT 355 , _ConstraintT 356 , _LitT 357#if MIN_VERSION_template_haskell(2,11,0) 358 , _InfixT 359 , _UInfixT 360 , _ParensT 361 , _WildCardT 362#endif 363#if MIN_VERSION_template_haskell(2,15,0) 364 , _AppKindT 365 , _ImplicitParamT 366#endif 367#if MIN_VERSION_template_haskell(2,16,0) 368 , _ForallVisT 369#endif 370#if MIN_VERSION_template_haskell(2,17,0) 371 , _MulArrowT 372#endif 373#if MIN_VERSION_template_haskell(2,17,0) 374 -- ** Specificity Prisms 375 , _SpecifiedSpec 376 , _InferredSpec 377#endif 378 -- ** TyVarBndr Prisms 379 , _PlainTV 380 , _KindedTV 381#if MIN_VERSION_template_haskell(2,11,0) 382 -- ** FamilyResultSig Prisms 383 , _NoSig 384 , _KindSig 385 , _TyVarSig 386#endif 387 -- ** TyLit Prisms 388 , _NumTyLit 389 , _StrTyLit 390#if !MIN_VERSION_template_haskell(2,10,0) 391 -- ** Pred Prisms 392 , _ClassP 393 , _EqualP 394#endif 395 -- ** Role Prisms 396 , _NominalR 397 , _RepresentationalR 398 , _PhantomR 399 , _InferR 400#if MIN_VERSION_template_haskell(2,12,0) 401 -- ** DerivStrategy Prisms 402 , _StockStrategy 403 , _AnyclassStrategy 404 , _NewtypeStrategy 405#endif 406 ) where 407 408import Control.Applicative 409import Control.Lens.At 410import Control.Lens.Getter 411import Control.Lens.Setter 412import Control.Lens.Fold 413import Control.Lens.Iso (Iso', iso) 414import Control.Lens.Lens 415import Control.Lens.Prism 416import Control.Lens.Tuple 417import Control.Lens.Traversal 418import qualified Data.Map as Map 419import Data.Map (Map) 420import Data.Maybe (fromMaybe) 421import Data.Monoid 422import qualified Data.Set as Set 423import Data.Set (Set) 424import Data.Set.Lens 425import Language.Haskell.TH 426import Language.Haskell.TH.Datatype.TyVarBndr 427import Language.Haskell.TH.Syntax 428import Data.Word 429#if MIN_VERSION_template_haskell(2,15,0) 430import Control.Lens.Internal.TH (unfoldType) 431import Data.Foldable as F (foldl') 432#endif 433import Prelude 434 435-- | Has a 'Name' 436class HasName t where 437 -- | Extract (or modify) the 'Name' of something 438 name :: Lens' t Name 439 440instance HasName (TyVarBndr_ flag) where 441 name = traverseTVName 442 443instance HasName Name where 444 name = id 445 446-- | On @template-haskell-2.11.0.0@ or later, if a 'GadtC' or 'RecGadtC' has 447-- multiple 'Name's, the leftmost 'Name' will be chosen. 448instance HasName Con where 449 name f (NormalC n tys) = (`NormalC` tys) <$> f n 450 name f (RecC n tys) = (`RecC` tys) <$> f n 451 name f (InfixC l n r) = (\n' -> InfixC l n' r) <$> f n 452 name f (ForallC bds ctx con) = ForallC bds ctx <$> name f con 453#if MIN_VERSION_template_haskell(2,11,0) 454 name f (GadtC ns argTys retTy) = 455 (\n -> GadtC [n] argTys retTy) <$> f (head ns) 456 name f (RecGadtC ns argTys retTy) = 457 (\n -> RecGadtC [n] argTys retTy) <$> f (head ns) 458#endif 459 460instance HasName Foreign where 461 name f (ImportF cc saf str n ty) = 462 (\n' -> ImportF cc saf str n' ty) <$> f n 463 name f (ExportF cc str n ty) = 464 (\n' -> ExportF cc str n' ty) <$> f n 465 466instance HasName RuleBndr where 467 name f (RuleVar n) = RuleVar <$> f n 468 name f (TypedRuleVar n ty) = (`TypedRuleVar` ty) <$> f n 469 470#if MIN_VERSION_template_haskell(2,11,0) 471instance HasName TypeFamilyHead where 472 name f (TypeFamilyHead n tvbs frs mia) = 473 (\n' -> TypeFamilyHead n' tvbs frs mia) <$> f n 474 475instance HasName InjectivityAnn where 476 name f (InjectivityAnn n deps) = (`InjectivityAnn` deps) <$> f n 477#endif 478 479-- | Contains some amount of `Type`s inside 480class HasTypes t where 481 -- | Traverse all the types 482 types :: Traversal' t Type 483 484instance HasTypes Type where 485 types = id 486 487instance HasTypes Con where 488 types f (NormalC n t) = NormalC n <$> traverse (_2 (types f)) t 489 types f (RecC n t) = RecC n <$> traverse (_3 (types f)) t 490 types f (InfixC t1 n t2) = InfixC <$> _2 (types f) t1 491 <*> pure n <*> _2 (types f) t2 492 types f (ForallC vb ctx con) = ForallC vb ctx <$> types f con 493#if MIN_VERSION_template_haskell(2,11,0) 494 types f (GadtC ns argTys retTy) = 495 GadtC ns <$> traverse (_2 (types f)) argTys <*> types f retTy 496 types f (RecGadtC ns argTys retTy) = 497 RecGadtC ns <$> traverse (_3 (types f)) argTys <*> types f retTy 498#endif 499 500instance HasTypes Foreign where 501 types f (ImportF cc saf str n t) = ImportF cc saf str n <$> types f t 502 types f (ExportF cc str n t) = ExportF cc str n <$> types f t 503 504instance HasTypes TySynEqn where 505#if MIN_VERSION_template_haskell(2,15,0) 506 types f (TySynEqn mtvbs lhs rhs) = TySynEqn <$> traverse (traverse go) mtvbs 507 <*> types f lhs 508 <*> types f rhs 509 where 510 go = traverseTVKind f 511#else 512 types f (TySynEqn lhss rhs) = TySynEqn <$> traverse (types f) lhss 513 <*> types f rhs 514#endif 515 516instance HasTypes t => HasTypes [t] where 517 types = traverse . types 518 519-- | Provides for the extraction of free type variables, and alpha renaming. 520class HasTypeVars t where 521 -- | When performing substitution into this traversal you're not allowed 522 -- to substitute in a name that is bound internally or you'll violate 523 -- the 'Traversal' laws, when in doubt generate your names with 'newName'. 524 typeVarsEx :: Set Name -> Traversal' t Name 525 526instance HasTypeVars (TyVarBndr_ flag) where 527 typeVarsEx s f b 528 | s^.contains (b^.name) = pure b 529 | otherwise = name f b 530 531instance HasTypeVars Name where 532 typeVarsEx s f n 533 | s^.contains n = pure n 534 | otherwise = f n 535 536instance HasTypeVars Type where 537 typeVarsEx s f (VarT n) = VarT <$> typeVarsEx s f n 538 typeVarsEx s f (AppT l r) = AppT <$> typeVarsEx s f l <*> typeVarsEx s f r 539 typeVarsEx s f (ForallT bs ctx ty) = ForallT bs <$> typeVarsEx s' f ctx <*> typeVarsEx s' f ty 540 where s' = s `Set.union` setOf typeVars bs 541 typeVarsEx _ _ t@ConT{} = pure t 542 typeVarsEx _ _ t@TupleT{} = pure t 543 typeVarsEx _ _ t@ListT{} = pure t 544 typeVarsEx _ _ t@ArrowT{} = pure t 545 typeVarsEx _ _ t@UnboxedTupleT{} = pure t 546 typeVarsEx s f (SigT t k) = SigT <$> typeVarsEx s f t 547 <*> typeVarsEx s f k 548 typeVarsEx _ _ t@PromotedT{} = pure t 549 typeVarsEx _ _ t@PromotedTupleT{} = pure t 550 typeVarsEx _ _ t@PromotedNilT{} = pure t 551 typeVarsEx _ _ t@PromotedConsT{} = pure t 552 typeVarsEx _ _ t@StarT{} = pure t 553 typeVarsEx _ _ t@ConstraintT{} = pure t 554 typeVarsEx _ _ t@LitT{} = pure t 555#if MIN_VERSION_template_haskell(2,10,0) 556 typeVarsEx _ _ t@EqualityT{} = pure t 557#endif 558#if MIN_VERSION_template_haskell(2,11,0) 559 typeVarsEx s f (InfixT t1 n t2) = InfixT <$> typeVarsEx s f t1 560 <*> pure n 561 <*> typeVarsEx s f t2 562 typeVarsEx s f (UInfixT t1 n t2) = UInfixT <$> typeVarsEx s f t1 563 <*> pure n 564 <*> typeVarsEx s f t2 565 typeVarsEx s f (ParensT t) = ParensT <$> typeVarsEx s f t 566 typeVarsEx _ _ t@WildCardT{} = pure t 567#endif 568#if MIN_VERSION_template_haskell(2,12,0) 569 typeVarsEx _ _ t@UnboxedSumT{} = pure t 570#endif 571#if MIN_VERSION_template_haskell(2,15,0) 572 typeVarsEx s f (AppKindT t k) = AppKindT <$> typeVarsEx s f t 573 <*> typeVarsEx s f k 574 typeVarsEx s f (ImplicitParamT n t) = ImplicitParamT n <$> typeVarsEx s f t 575#endif 576#if MIN_VERSION_template_haskell(2,16,0) 577 typeVarsEx s f (ForallVisT bs ty) = ForallVisT bs <$> typeVarsEx s' f ty 578 where s' = s `Set.union` setOf typeVars bs 579#endif 580#if MIN_VERSION_template_haskell(2,17,0) 581 typeVarsEx _ _ t@MulArrowT{} = pure t 582#endif 583 584#if !MIN_VERSION_template_haskell(2,10,0) 585instance HasTypeVars Pred where 586 typeVarsEx s f (ClassP n ts) = ClassP n <$> typeVarsEx s f ts 587 typeVarsEx s f (EqualP l r) = EqualP <$> typeVarsEx s f l <*> typeVarsEx s f r 588#endif 589 590instance HasTypeVars Con where 591 typeVarsEx s f (NormalC n ts) = NormalC n <$> traverseOf (traverse . _2) (typeVarsEx s f) ts 592 typeVarsEx s f (RecC n ts) = RecC n <$> traverseOf (traverse . _3) (typeVarsEx s f) ts 593 typeVarsEx s f (InfixC l n r) = InfixC <$> g l <*> pure n <*> g r 594 where g (i, t) = (,) i <$> typeVarsEx s f t 595 typeVarsEx s f (ForallC bs ctx c) = ForallC bs <$> typeVarsEx s' f ctx <*> typeVarsEx s' f c 596 where s' = s `Set.union` setOf typeVars bs 597#if MIN_VERSION_template_haskell(2,11,0) 598 typeVarsEx s f (GadtC ns argTys retTy) = 599 GadtC ns <$> traverseOf (traverse . _2) (typeVarsEx s f) argTys 600 <*> typeVarsEx s f retTy 601 typeVarsEx s f (RecGadtC ns argTys retTy) = 602 RecGadtC ns <$> traverseOf (traverse . _3) (typeVarsEx s f) argTys 603 <*> typeVarsEx s f retTy 604#endif 605 606instance HasTypeVars t => HasTypeVars [t] where 607 typeVarsEx s = traverse . typeVarsEx s 608 609instance HasTypeVars t => HasTypeVars (Maybe t) where 610 typeVarsEx s = traverse . typeVarsEx s 611 612-- | Traverse /free/ type variables 613typeVars :: HasTypeVars t => Traversal' t Name 614typeVars = typeVarsEx mempty 615 616-- | Substitute using a map of names in for /free/ type variables 617substTypeVars :: HasTypeVars t => Map Name Name -> t -> t 618substTypeVars m = over typeVars $ \n -> fromMaybe n (m^.at n) 619 620-- | Provides substitution for types 621class SubstType t where 622 -- | Perform substitution for types 623 substType :: Map Name Type -> t -> t 624 625instance SubstType Type where 626 substType m t@(VarT n) = fromMaybe t (m^.at n) 627 substType m (ForallT bs ctx ty) = ForallT bs (substType m' ctx) (substType m' ty) 628 where m' = foldrOf typeVars Map.delete m bs 629 substType _ t@ConT{} = t 630 substType _ t@TupleT{} = t 631 substType _ t@ListT{} = t 632 substType _ t@ArrowT{} = t 633 substType _ t@UnboxedTupleT{} = t 634 substType m (AppT l r) = AppT (substType m l) (substType m r) 635 substType m (SigT t k) = SigT (substType m t) 636 (substType m k) 637 substType _ t@PromotedT{} = t 638 substType _ t@PromotedTupleT{} = t 639 substType _ t@PromotedNilT{} = t 640 substType _ t@PromotedConsT{} = t 641 substType _ t@StarT{} = t 642 substType _ t@ConstraintT{} = t 643 substType _ t@LitT{} = t 644#if MIN_VERSION_template_haskell(2,10,0) 645 substType _ t@EqualityT{} = t 646#endif 647#if MIN_VERSION_template_haskell(2,11,0) 648 substType m (InfixT t1 n t2) = InfixT (substType m t1) n (substType m t2) 649 substType m (UInfixT t1 n t2) = UInfixT (substType m t1) n (substType m t2) 650 substType m (ParensT t) = ParensT (substType m t) 651 substType _ t@WildCardT{} = t 652#endif 653#if MIN_VERSION_template_haskell(2,12,0) 654 substType _ t@UnboxedSumT{} = t 655#endif 656#if MIN_VERSION_template_haskell(2,15,0) 657 substType m (AppKindT t k) = AppKindT (substType m t) (substType m k) 658 substType m (ImplicitParamT n t) = ImplicitParamT n (substType m t) 659#endif 660#if MIN_VERSION_template_haskell(2,16,0) 661 substType m (ForallVisT bs ty) = ForallVisT bs (substType m' ty) 662 where m' = foldrOf typeVars Map.delete m bs 663#endif 664#if MIN_VERSION_template_haskell(2,17,0) 665 substType _ t@MulArrowT{} = t 666#endif 667 668instance SubstType t => SubstType [t] where 669 substType = map . substType 670 671#if !MIN_VERSION_template_haskell(2,10,0) 672instance SubstType Pred where 673 substType m (ClassP n ts) = ClassP n (substType m ts) 674 substType m (EqualP l r) = substType m (EqualP l r) 675#endif 676 677-- | Provides a 'Traversal' of the types of each field of a constructor. 678-- 679-- @ 680-- conFields :: 'Traversal'' 'Con' 'BangType' -- template-haskell-2.11+ 681-- conFields :: 'Traversal'' 'Con' 'StrictType' -- Earlier versions 682-- @ 683conFields :: Traversal' Con 684#if MIN_VERSION_template_haskell(2,11,0) 685 BangType 686#else 687 StrictType 688#endif 689conFields f (NormalC n fs) = NormalC n <$> traverse f fs 690conFields f (RecC n fs) = RecC n <$> traverse (sansVar f) fs 691conFields f (InfixC l n r) = InfixC <$> f l <*> pure n <*> f r 692conFields f (ForallC bds ctx c) = ForallC bds ctx <$> conFields f c 693#if MIN_VERSION_template_haskell(2,11,0) 694conFields f (GadtC ns argTys retTy) = 695 GadtC ns <$> traverse f argTys <*> pure retTy 696conFields f (RecGadtC ns argTys retTy) = 697 RecGadtC ns <$> traverse (sansVar f) argTys <*> pure retTy 698#endif 699 700-- | 701-- @ 702-- sansVar :: 'Traversal'' 'VarBangType' 'BangType' -- template-haskell-2.11+ 703-- sansVar :: 'Traversal'' 'VarStrictType' 'StrictType' -- Earlier versions 704-- @ 705#if MIN_VERSION_template_haskell(2,11,0) 706sansVar :: Traversal' VarBangType BangType 707#else 708sansVar :: Traversal' VarStrictType StrictType 709#endif 710sansVar f (fn,s,t) = (\(s', t') -> (fn,s',t')) <$> f (s, t) 711 712-- | 'Traversal' of the types of the /named/ fields of a constructor. 713-- 714-- @ 715-- conNamedFields :: 'Traversal'' 'Con' 'VarBangType' -- template-haskell-2.11+ 716-- conNamedFields :: 'Traversal'' 'Con' 'VarStrictType' -- Earlier versions 717-- @ 718conNamedFields :: Traversal' Con 719#if MIN_VERSION_template_haskell(2,11,0) 720 VarBangType 721#else 722 VarStrictType 723#endif 724conNamedFields _ c@NormalC{} = pure c 725conNamedFields _ c@InfixC{} = pure c 726conNamedFields f (RecC n fs) = RecC n <$> traverse f fs 727conNamedFields f (ForallC a b fs) = ForallC a b <$> conNamedFields f fs 728#if MIN_VERSION_template_haskell(2,11,0) 729conNamedFields _ c@GadtC{} = pure c 730conNamedFields f (RecGadtC ns argTys retTy) = 731 RecGadtC ns <$> traverse f argTys <*> pure retTy 732#endif 733 734-- Lenses and Prisms 735locFileName :: Lens' Loc String 736locFileName = lens loc_filename 737 $ \loc fn -> loc { loc_filename = fn } 738 739locPackage :: Lens' Loc String 740locPackage = lens loc_package 741 $ \loc fn -> loc { loc_package = fn } 742 743locModule :: Lens' Loc String 744locModule = lens loc_module 745 $ \loc fn -> loc { loc_module = fn } 746 747locStart :: Lens' Loc CharPos 748locStart = lens loc_start 749 $ \loc fn -> loc { loc_start = fn } 750 751locEnd :: Lens' Loc CharPos 752locEnd = lens loc_end 753 $ \loc fn -> loc { loc_end = fn } 754 755funDepInputs :: Lens' FunDep [Name] 756funDepInputs = lens g s where 757 g (FunDep xs _) = xs 758 s (FunDep _ ys) xs = FunDep xs ys 759 760funDepOutputs :: Lens' FunDep [Name] 761funDepOutputs = lens g s where 762 g (FunDep _ xs) = xs 763 s (FunDep ys _) = FunDep ys 764 765fieldExpName :: Lens' FieldExp Name 766fieldExpName = _1 767 768fieldExpExpression :: Lens' FieldExp Exp 769fieldExpExpression = _2 770 771fieldPatName :: Lens' FieldPat Name 772fieldPatName = _1 773 774fieldPatPattern :: Lens' FieldPat Pat 775fieldPatPattern = _2 776 777matchPattern :: Lens' Match Pat 778matchPattern = lens g s where 779 g (Match p _ _) = p 780 s (Match _ x y) p = Match p x y 781 782matchBody :: Lens' Match Body 783matchBody = lens g s where 784 g (Match _ b _) = b 785 s (Match x _ y) b = Match x b y 786 787matchDeclarations :: Lens' Match [Dec] 788matchDeclarations = lens g s where 789 g (Match _ _ ds) = ds 790 s (Match x y _ ) = Match x y 791 792fixityPrecedence :: Lens' Fixity Int 793fixityPrecedence = lens g s where 794 g (Fixity i _) = i 795 s (Fixity _ x) i = Fixity i x 796 797fixityDirection :: Lens' Fixity FixityDirection 798fixityDirection = lens g s where 799 g (Fixity _ d) = d 800 s (Fixity i _) = Fixity i 801 802clausePattern :: Lens' Clause [Pat] 803clausePattern = lens g s where 804 g (Clause ps _ _) = ps 805 s (Clause _ x y) ps = Clause ps x y 806 807clauseBody :: Lens' Clause Body 808clauseBody = lens g s where 809 g (Clause _ b _) = b 810 s (Clause x _ y) b = Clause x b y 811 812clauseDecs :: Lens' Clause [Dec] 813clauseDecs = lens g s where 814 g (Clause _ _ ds) = ds 815 s (Clause x y _ ) = Clause x y 816 817#if MIN_VERSION_template_haskell(2,11,0) 818injectivityAnnOutput :: Lens' InjectivityAnn Name 819injectivityAnnOutput = lens g s where 820 g (InjectivityAnn o _) = o 821 s (InjectivityAnn _ i) o = InjectivityAnn o i 822 823injectivityAnnInputs :: Lens' InjectivityAnn [Name] 824injectivityAnnInputs = lens g s where 825 g (InjectivityAnn _ i) = i 826 s (InjectivityAnn o _) = InjectivityAnn o 827 828typeFamilyHeadName :: Lens' TypeFamilyHead Name 829typeFamilyHeadName = lens g s where 830 g (TypeFamilyHead n _ _ _ ) = n 831 s (TypeFamilyHead _ tvbs rs ia) n = TypeFamilyHead n tvbs rs ia 832 833typeFamilyHeadTyVarBndrs :: Lens' TypeFamilyHead [TyVarBndrUnit] 834typeFamilyHeadTyVarBndrs = lens g s where 835 g (TypeFamilyHead _ tvbs _ _ ) = tvbs 836 s (TypeFamilyHead n _ rs ia) tvbs = TypeFamilyHead n tvbs rs ia 837 838typeFamilyHeadResultSig :: Lens' TypeFamilyHead FamilyResultSig 839typeFamilyHeadResultSig = lens g s where 840 g (TypeFamilyHead _ _ rs _ ) = rs 841 s (TypeFamilyHead n tvbs _ ia) rs = TypeFamilyHead n tvbs rs ia 842 843typeFamilyHeadInjectivityAnn :: Lens' TypeFamilyHead (Maybe InjectivityAnn) 844typeFamilyHeadInjectivityAnn = lens g s where 845 g (TypeFamilyHead _ _ _ ia) = ia 846 s (TypeFamilyHead n tvbs rs _ ) = TypeFamilyHead n tvbs rs 847 848bangSourceUnpackedness :: Lens' Bang SourceUnpackedness 849bangSourceUnpackedness = lens g s where 850 g (Bang su _ ) = su 851 s (Bang _ ss) su = Bang su ss 852 853bangSourceStrictness :: Lens' Bang SourceStrictness 854bangSourceStrictness = lens g s where 855 g (Bang _ su) = su 856 s (Bang ss _ ) = Bang ss 857#endif 858 859#if MIN_VERSION_template_haskell(2,12,0) 860derivClauseStrategy :: Lens' DerivClause (Maybe DerivStrategy) 861derivClauseStrategy = lens g s where 862 g (DerivClause mds _) = mds 863 s (DerivClause _ c) mds = DerivClause mds c 864 865derivClauseCxt :: Lens' DerivClause Cxt 866derivClauseCxt = lens g s where 867 g (DerivClause _ c) = c 868 s (DerivClause mds _) = DerivClause mds 869#endif 870 871_ClassI :: Prism' Info (Dec, [InstanceDec]) 872_ClassI 873 = prism' reviewer remitter 874 where 875 reviewer (x, y) = ClassI x y 876 remitter (ClassI x y) = Just (x, y) 877 remitter _ = Nothing 878 879-- | 880-- @ 881-- _ClassOpI :: 'Prism'' 'Info' ('Name', 'Type', 'ParentName') -- template-haskell-2.11+ 882-- _ClassOpI :: 'Prism'' 'Info' ('Name', 'Type', 'ParentName', 'Fixity') -- template-haskell-2.8 through 2.10 883-- _ClassOpI :: 'Prism'' 'Info' ('Name', 'Type', 'Name', 'Fixity') -- Earlier versions 884-- @ 885#if MIN_VERSION_template_haskell(2,11,0) 886_ClassOpI :: Prism' Info (Name, Type, ParentName) 887_ClassOpI 888 = prism' reviewer remitter 889 where 890 reviewer (x, y, z) = ClassOpI x y z 891 remitter (ClassOpI x y z) = Just (x, y, z) 892 remitter _ = Nothing 893#else 894_ClassOpI :: Prism' Info (Name, Type, ParentName, Fixity) 895_ClassOpI 896 = prism' reviewer remitter 897 where 898 reviewer (x, y, z, w) = ClassOpI x y z w 899 remitter (ClassOpI x y z w) = Just (x, y, z, w) 900 remitter _ = Nothing 901#endif 902 903_TyConI :: Prism' Info Dec 904_TyConI 905 = prism' reviewer remitter 906 where 907 reviewer = TyConI 908 remitter (TyConI x) = Just x 909 remitter _ = Nothing 910 911#if MIN_VERSION_template_haskell(2,11,0) 912_FamilyI :: Prism' Info (Dec, [InstanceDec]) 913#else 914_FamilyI :: Prism' Info (Dec, [Dec]) 915#endif 916_FamilyI 917 = prism' reviewer remitter 918 where 919 reviewer (x, y) = FamilyI x y 920 remitter (FamilyI x y) = Just (x, y) 921 remitter _ = Nothing 922 923_PrimTyConI :: Prism' Info (Name, Arity, Unlifted) 924_PrimTyConI 925 = prism' reviewer remitter 926 where 927 reviewer (x, y, z) = PrimTyConI x y z 928 remitter (PrimTyConI x y z) = Just (x, y, z) 929 remitter _ = Nothing 930 931-- | 932-- @ 933-- _DataConI :: 'Prism'' 'Info' ('Name', 'Type', 'ParentName') -- template-haskell-2.11+ 934-- _DataConI :: 'Prism'' 'Info' ('Name', 'Type', 'ParentName', 'Fixity') -- template-haskell-2.8 through 2.10 935-- _DataConI :: 'Prism'' 'Info' ('Name', 'Type', 'Name', 'Fixity') -- Earlier versions 936-- @ 937#if MIN_VERSION_template_haskell(2,11,0) 938_DataConI :: Prism' Info (Name, Type, ParentName) 939_DataConI 940 = prism' reviewer remitter 941 where 942 reviewer (x, y, z) = DataConI x y z 943 remitter (DataConI x y z) = Just (x, y, z) 944 remitter _ = Nothing 945#else 946_DataConI :: Prism' Info (Name, Type, ParentName, Fixity) 947_DataConI 948 = prism' reviewer remitter 949 where 950 reviewer (x, y, z, w) = DataConI x y z w 951 remitter (DataConI x y z w) = Just (x, y, z, w) 952 remitter _ = Nothing 953#endif 954 955-- | 956-- @ 957-- _VarI :: 'Prism'' 'Info' ('Name', 'Type', 'Maybe' 'Dec') -- template-haskell-2.11+ 958-- _VarI :: 'Prism'' 'Info' ('Name', 'Type', 'Maybe' 'Dec', 'Fixity') -- Earlier versions 959-- @ 960#if MIN_VERSION_template_haskell(2,11,0) 961_VarI :: Prism' Info (Name, Type, Maybe Dec) 962_VarI 963 = prism' reviewer remitter 964 where 965 reviewer (x, y, z) = VarI x y z 966 remitter (VarI x y z) = Just (x, y, z) 967 remitter _ = Nothing 968#else 969_VarI :: Prism' Info (Name, Type, Maybe Dec, Fixity) 970_VarI 971 = prism' reviewer remitter 972 where 973 reviewer (x, y, z, w) = VarI x y z w 974 remitter (VarI x y z w) = Just (x, y, z, w) 975 remitter _ = Nothing 976#endif 977 978_TyVarI :: Prism' Info (Name, Type) 979_TyVarI 980 = prism' reviewer remitter 981 where 982 reviewer (x, y) = TyVarI x y 983 remitter (TyVarI x y) = Just (x, y) 984 remitter _ = Nothing 985 986#if MIN_VERSION_template_haskell(2,12,0) 987_PatSynI :: Prism' Info (Name, PatSynType) 988_PatSynI 989 = prism' reviewer remitter 990 where 991 reviewer (x, y) = PatSynI x y 992 remitter (PatSynI x y) = Just (x, y) 993 remitter _ = Nothing 994#endif 995 996_FunD :: Prism' Dec (Name, [Clause]) 997_FunD 998 = prism' reviewer remitter 999 where 1000 reviewer (x, y) = FunD x y 1001 remitter (FunD x y) = Just (x,y) 1002 remitter _ = Nothing 1003 1004_ValD :: Prism' Dec (Pat, Body, [Dec]) 1005_ValD 1006 = prism' reviewer remitter 1007 where 1008 reviewer (x, y, z) = ValD x y z 1009 remitter (ValD x y z) = Just (x, y, z) 1010 remitter _ = Nothing 1011 1012_TySynD :: Prism' Dec (Name, [TyVarBndrUnit], Type) 1013_TySynD 1014 = prism' reviewer remitter 1015 where 1016 reviewer (x, y, z) = TySynD x y z 1017 remitter (TySynD x y z) = Just (x, y, z) 1018 remitter _ = Nothing 1019 1020_ClassD :: Prism' Dec (Cxt, Name, [TyVarBndrUnit], [FunDep], [Dec]) 1021_ClassD 1022 = prism' reviewer remitter 1023 where 1024 reviewer (x, y, z, w, u) = ClassD x y z w u 1025 remitter (ClassD x y z w u) = Just (x, y, z, w, u) 1026 remitter _ = Nothing 1027 1028-- | 1029-- @ 1030-- _InstanceD :: 'Prism'' 'Dec' ('Maybe' 'Overlap', 'Cxt', 'Type', ['Dec']) -- template-haskell-2.11+ 1031-- _InstanceD :: 'Prism'' 'Dec' ('Cxt', 'Type', ['Dec']) -- Earlier versions 1032-- @ 1033#if MIN_VERSION_template_haskell(2,11,0) 1034_InstanceD :: Prism' Dec (Maybe Overlap, Cxt, Type, [Dec]) 1035#else 1036_InstanceD :: Prism' Dec (Cxt, Type, [Dec]) 1037#endif 1038_InstanceD 1039 = prism' reviewer remitter 1040 where 1041#if MIN_VERSION_template_haskell(2,11,0) 1042 reviewer (x, y, z, w) = InstanceD x y z w 1043 remitter (InstanceD x y z w) = Just (x, y, z, w) 1044#else 1045 reviewer (x, y, z) = InstanceD x y z 1046 remitter (InstanceD x y z) = Just ( x, y, z) 1047#endif 1048 remitter _ = Nothing 1049 1050#if MIN_VERSION_template_haskell(2,11,0) 1051_Overlappable :: Prism' Overlap () 1052_Overlappable = prism' reviewer remitter 1053 where 1054 reviewer () = Overlappable 1055 remitter Overlappable = Just () 1056 remitter _ = Nothing 1057 1058_Overlapping :: Prism' Overlap () 1059_Overlapping = prism' reviewer remitter 1060 where 1061 reviewer () = Overlapping 1062 remitter Overlapping = Just () 1063 remitter _ = Nothing 1064 1065_Overlaps :: Prism' Overlap () 1066_Overlaps = prism' reviewer remitter 1067 where 1068 reviewer () = Overlaps 1069 remitter Overlaps = Just () 1070 remitter _ = Nothing 1071 1072_Incoherent :: Prism' Overlap () 1073_Incoherent = prism' reviewer remitter 1074 where 1075 reviewer () = Incoherent 1076 remitter Incoherent = Just () 1077 remitter _ = Nothing 1078#endif 1079 1080_SigD :: Prism' Dec (Name, Type) 1081_SigD 1082 = prism' reviewer remitter 1083 where 1084 reviewer (x, y) = SigD x y 1085 remitter (SigD x y) = Just (x, y) 1086 remitter _ = Nothing 1087 1088_ForeignD :: Prism' Dec Foreign 1089_ForeignD 1090 = prism' reviewer remitter 1091 where 1092 reviewer = ForeignD 1093 remitter (ForeignD x) = Just x 1094 remitter _ = Nothing 1095 1096_InfixD :: Prism' Dec (Fixity, Name) 1097_InfixD 1098 = prism' reviewer remitter 1099 where 1100 reviewer (x, y) = InfixD x y 1101 remitter (InfixD x y) = Just (x, y) 1102 remitter _ = Nothing 1103 1104_PragmaD :: Prism' Dec Pragma 1105_PragmaD 1106 = prism' reviewer remitter 1107 where 1108 reviewer = PragmaD 1109 remitter (PragmaD x) = Just x 1110 remitter _ = Nothing 1111 1112-- | 1113-- @ 1114-- _TySynInstD :: 'Prism'' 'Dec' 'TySynEqn' -- template-haskell-2.15+ 1115-- _TySynInstD :: 'Prism'' 'Dec' ('Name', 'TySynEqn') -- template-haskell-2.9 through 2.14 1116-- _TySynInstD :: 'Prism'' 'Dec' ('Name', ['Type'], 'Type') -- Earlier versions 1117-- @ 1118#if MIN_VERSION_template_haskell(2,15,0) 1119_TySynInstD :: Prism' Dec TySynEqn 1120_TySynInstD 1121 = prism' reviewer remitter 1122 where 1123 reviewer = TySynInstD 1124 remitter (TySynInstD x) = Just x 1125 remitter _ = Nothing 1126#else 1127_TySynInstD :: Prism' Dec (Name, TySynEqn) 1128_TySynInstD 1129 = prism' reviewer remitter 1130 where 1131 reviewer (x, y) = TySynInstD x y 1132 remitter (TySynInstD x y) = Just (x, y) 1133 remitter _ = Nothing 1134#endif 1135 1136_RoleAnnotD :: Prism' Dec (Name, [Role]) 1137_RoleAnnotD 1138 = prism' reviewer remitter 1139 where 1140 reviewer (x, y) = RoleAnnotD x y 1141 remitter (RoleAnnotD x y) = Just (x, y) 1142 remitter _ = Nothing 1143 1144-- | 1145-- @ 1146-- _StandaloneDerivD :: 'Prism'' 'Dec' ('Maybe' 'DerivStrategy', 'Cxt', 'Type') -- template-haskell-2.12+ 1147-- _StandaloneDerivD :: 'Prism'' 'Dec' ('Cxt', 'Type') -- Earlier versions 1148-- @ 1149#if MIN_VERSION_template_haskell(2,12,0) 1150_StandaloneDerivD :: Prism' Dec (Maybe DerivStrategy, Cxt, Type) 1151_StandaloneDerivD 1152 = prism' reviewer remitter 1153 where 1154 reviewer (x, y, z) = StandaloneDerivD x y z 1155 remitter (StandaloneDerivD x y z) = Just (x, y, z) 1156 remitter _ = Nothing 1157#elif MIN_VERSION_template_haskell(2,10,0) 1158_StandaloneDerivD :: Prism' Dec (Cxt, Type) 1159_StandaloneDerivD 1160 = prism' reviewer remitter 1161 where 1162 reviewer (x, y) = StandaloneDerivD x y 1163 remitter (StandaloneDerivD x y) = Just (x, y) 1164 remitter _ = Nothing 1165#endif 1166 1167#if MIN_VERSION_template_haskell(2,10,0) 1168_DefaultSigD :: Prism' Dec (Name, Type) 1169_DefaultSigD 1170 = prism' reviewer remitter 1171 where 1172 reviewer (x, y) = DefaultSigD x y 1173 remitter (DefaultSigD x y) = Just (x, y) 1174 remitter _ = Nothing 1175#endif 1176 1177# if MIN_VERSION_template_haskell(2,12,0) 1178type DataPrism' tys cons = Prism' Dec (Cxt, Name, tys, Maybe Kind, cons, [DerivClause]) 1179# elif MIN_VERSION_template_haskell(2,11,0) 1180type DataPrism' tys cons = Prism' Dec (Cxt, Name, tys, Maybe Kind, cons, Cxt) 1181# endif 1182 1183-- | 1184-- @ 1185-- _DataInstD :: 'Prism'' 'Dec' ('Cxt', 'Maybe' ['TyVarBndrUnit'], 'Type', 'Maybe' 'Kind', ['Con'], ['DerivClause']) -- template-haskell-2.15+ 1186-- _DataInstD :: 'Prism'' 'Dec' ('Cxt', 'Name', ['Type'], 'Maybe' 'Kind', ['Con'], ['DerivClause']) -- template-haskell-2.12 through 2.14 1187-- _DataInstD :: 'Prism'' 'Dec' ('Cxt', 'Name', ['Type'], 'Maybe' 'Kind', ['Con'], 'Cxt') -- template-haskell-2.11 1188-- _DataInstD :: 'Prism'' 'Dec' ('Cxt', 'Name', ['Type'], ['Con'], ['Name']) -- Earlier versions 1189-- @ 1190#if MIN_VERSION_template_haskell(2,15,0) 1191_DataInstD :: Prism' Dec (Cxt, Maybe [TyVarBndrUnit], Type, Maybe Kind, [Con], [DerivClause]) 1192_DataInstD 1193 = prism' reviewer remitter 1194 where 1195 reviewer (x, y, z, w, u, v) = DataInstD x y z w u v 1196 remitter (DataInstD x y z w u v) = Just (x, y, z, w, u, v) 1197 remitter _ = Nothing 1198#elif MIN_VERSION_template_haskell(2,11,0) 1199_DataInstD :: DataPrism' [Type] [Con] 1200_DataInstD 1201 = prism' reviewer remitter 1202 where 1203 reviewer (x, y, z, w, u, v) = DataInstD x y z w u v 1204 remitter (DataInstD x y z w u v) = Just (x, y, z, w, u, v) 1205 remitter _ = Nothing 1206#else 1207_DataInstD :: Prism' Dec (Cxt, Name, [Type], [Con], [Name]) 1208_DataInstD 1209 = prism' reviewer remitter 1210 where 1211 reviewer (x, y, z, w, u) = DataInstD x y z w u 1212 remitter (DataInstD x y z w u) = Just (x, y, z, w, u) 1213 remitter _ = Nothing 1214#endif 1215 1216-- | 1217-- @ 1218-- _NewtypeInstD :: 'Prism'' 'Dec' ('Cxt', 'Maybe' ['TyVarBndrUnit'], 'Type', 'Maybe' 'Kind', 'Con', ['DerivClause']) -- template-haskell-2.15+ 1219-- _NewtypeInstD :: 'Prism'' 'Dec' ('Cxt', 'Name', ['Type'], 'Maybe' 'Kind', 'Con', ['DerivClause']) -- template-haskell-2.12 through 2.14 1220-- _NewtypeInstD :: 'Prism'' 'Dec' ('Cxt', 'Name', ['Type'], 'Maybe' 'Kind', 'Con', 'Cxt') -- template-haskell-2.11 1221-- _NewtypeInstD :: 'Prism'' 'Dec' ('Cxt', 'Name', ['Type'], 'Con', ['Name']) -- Earlier versions 1222-- @ 1223#if MIN_VERSION_template_haskell(2,15,0) 1224_NewtypeInstD :: Prism' Dec (Cxt, Maybe [TyVarBndrUnit], Type, Maybe Kind, Con, [DerivClause]) 1225_NewtypeInstD 1226 = prism' reviewer remitter 1227 where 1228 reviewer (x, y, z, w, u, v) = NewtypeInstD x y z w u v 1229 remitter (NewtypeInstD x y z w u v) = Just (x, y, z, w, u, v) 1230 remitter _ = Nothing 1231#elif MIN_VERSION_template_haskell(2,11,0) 1232_NewtypeInstD :: DataPrism' [Type] Con 1233_NewtypeInstD 1234 = prism' reviewer remitter 1235 where 1236 reviewer (x, y, z, w, u, v) = NewtypeInstD x y z w u v 1237 remitter (NewtypeInstD x y z w u v) = Just (x, y, z, w, u, v) 1238 remitter _ = Nothing 1239#else 1240_NewtypeInstD :: Prism' Dec (Cxt, Name, [Type], Con, [Name]) 1241_NewtypeInstD 1242 = prism' reviewer remitter 1243 where 1244 reviewer (x, y, z, w, u) = NewtypeInstD x y z w u 1245 remitter (NewtypeInstD x y z w u) = Just (x, y, z, w, u) 1246 remitter _ = Nothing 1247#endif 1248 1249#if MIN_VERSION_template_haskell(2,11,0) 1250_ClosedTypeFamilyD :: Prism' Dec (TypeFamilyHead, [TySynEqn]) 1251_ClosedTypeFamilyD 1252 = prism' reviewer remitter 1253 where 1254 reviewer (x, y) = ClosedTypeFamilyD x y 1255 remitter (ClosedTypeFamilyD x y) = Just (x, y) 1256 remitter _ = Nothing 1257#else 1258_ClosedTypeFamilyD :: Prism' Dec (Name, [TyVarBndrUnit], Maybe Kind, [TySynEqn]) 1259_ClosedTypeFamilyD 1260 = prism' reviewer remitter 1261 where 1262 reviewer (x, y, z, w) = ClosedTypeFamilyD x y z w 1263 remitter (ClosedTypeFamilyD x y z w) = Just (x, y, z, w) 1264 remitter _ = Nothing 1265#endif 1266 1267-- | 1268-- @ 1269-- _DataD :: 'Prism'' 'Dec' ('Cxt', 'Name', ['TyVarBndrUnit'], 'Maybe' 'Kind', ['Con'], ['DerivClause']) -- template-haskell-2.12+ 1270-- _DataD :: 'Prism'' 'Dec' ('Cxt', 'Name', ['Type'], 'Maybe' 'Kind', ['Con'], 'Cxt') -- template-haskell-2.11 1271-- _DataD :: 'Prism'' 'Dec' ('Cxt', 'Name', ['Type'], ['Con'], ['Name']) -- Earlier versions 1272-- @ 1273#if MIN_VERSION_template_haskell(2,11,0) 1274_DataD :: DataPrism' [TyVarBndrUnit] [Con] 1275_DataD 1276 = prism' reviewer remitter 1277 where 1278 reviewer (x, y, z, w, u, v) = DataD x y z w u v 1279 remitter (DataD x y z w u v) = Just (x, y, z, w, u, v) 1280 remitter _ = Nothing 1281#else 1282_DataD :: Prism' Dec (Cxt, Name, [TyVarBndrUnit], [Con], [Name]) 1283_DataD 1284 = prism' reviewer remitter 1285 where 1286 reviewer (x, y, z, w, u) = DataD x y z w u 1287 remitter (DataD x y z w u) = Just (x, y, z, w, u) 1288 remitter _ = Nothing 1289#endif 1290 1291-- | 1292-- @ 1293-- _NewtypeD :: 'Prism'' 'Dec' ('Cxt', 'Name', ['TyVarBndrUnit'], 'Maybe' 'Kind', 'Con', ['DerivClause']) -- template-haskell-2.12+ 1294-- _NewtypeD :: 'Prism'' 'Dec' ('Cxt', 'Name', ['Type'], 'Maybe' 'Kind', 'Con', 'Cxt') -- template-haskell-2.11 1295-- _NewtypeD :: 'Prism'' 'Dec' ('Cxt', 'Name', ['Type'], 'Con', ['Name']) -- Earlier versions 1296-- @ 1297#if MIN_VERSION_template_haskell(2,11,0) 1298_NewtypeD :: DataPrism' [TyVarBndrUnit] Con 1299_NewtypeD 1300 = prism' reviewer remitter 1301 where 1302 reviewer (x, y, z, w, u, v) = NewtypeD x y z w u v 1303 remitter (NewtypeD x y z w u v) = Just (x, y, z, w, u, v) 1304 remitter _ = Nothing 1305#else 1306_NewtypeD :: Prism' Dec (Cxt, Name, [TyVarBndrUnit], Con, [Name]) 1307_NewtypeD 1308 = prism' reviewer remitter 1309 where 1310 reviewer (x, y, z, w, u) = NewtypeD x y z w u 1311 remitter (NewtypeD x y z w u) = Just (x, y, z, w, u) 1312 remitter _ = Nothing 1313#endif 1314 1315#if MIN_VERSION_template_haskell(2,11,0) 1316_DataFamilyD :: Prism' Dec (Name, [TyVarBndrUnit], Maybe Kind) 1317_DataFamilyD 1318 = prism' reviewer remitter 1319 where 1320 reviewer (x, y, z) = DataFamilyD x y z 1321 remitter (DataFamilyD x y z) = Just (x, y, z) 1322 remitter _ = Nothing 1323 1324_OpenTypeFamilyD :: Prism' Dec TypeFamilyHead 1325_OpenTypeFamilyD 1326 = prism' reviewer remitter 1327 where 1328 reviewer = OpenTypeFamilyD 1329 remitter (OpenTypeFamilyD x) = Just x 1330 remitter _ = Nothing 1331#else 1332_FamilyD :: Prism' Dec (FamFlavour, Name, [TyVarBndrUnit], Maybe Kind) 1333_FamilyD 1334 = prism' reviewer remitter 1335 where 1336 reviewer (x, y, z, w) = FamilyD x y z w 1337 remitter (FamilyD x y z w) = Just (x, y, z, w) 1338 remitter _ = Nothing 1339#endif 1340 1341#if MIN_VERSION_template_haskell(2,12,0) 1342_PatSynD :: Prism' Dec (Name, PatSynArgs, PatSynDir, Pat) 1343_PatSynD 1344 = prism' reviewer remitter 1345 where 1346 reviewer (x, y, z, w) = PatSynD x y z w 1347 remitter (PatSynD x y z w) = Just (x, y, z, w) 1348 remitter _ = Nothing 1349 1350_PatSynSigD :: Prism' Dec (Name, PatSynType) 1351_PatSynSigD 1352 = prism' reviewer remitter 1353 where 1354 reviewer (x, y) = PatSynSigD x y 1355 remitter (PatSynSigD x y) = Just (x, y) 1356 remitter _ = Nothing 1357#endif 1358 1359#if MIN_VERSION_template_haskell(2,15,0) 1360_ImplicitParamBindD :: Prism' Dec (String, Exp) 1361_ImplicitParamBindD 1362 = prism' reviewer remitter 1363 where 1364 reviewer (x, y) = ImplicitParamBindD x y 1365 remitter (ImplicitParamBindD x y) = Just (x, y) 1366 remitter _ = Nothing 1367#endif 1368 1369#if MIN_VERSION_template_haskell(2,12,0) 1370_Unidir :: Prism' PatSynDir () 1371_Unidir 1372 = prism' reviewer remitter 1373 where 1374 reviewer () = Unidir 1375 remitter Unidir = Just () 1376 remitter _ = Nothing 1377 1378_ImplBidir :: Prism' PatSynDir () 1379_ImplBidir 1380 = prism' reviewer remitter 1381 where 1382 reviewer () = ImplBidir 1383 remitter ImplBidir = Just () 1384 remitter _ = Nothing 1385 1386_ExplBidir :: Prism' PatSynDir [Clause] 1387_ExplBidir 1388 = prism' reviewer remitter 1389 where 1390 reviewer = ExplBidir 1391 remitter (ExplBidir x) = Just x 1392 remitter _ = Nothing 1393 1394_PrefixPatSyn :: Prism' PatSynArgs [Name] 1395_PrefixPatSyn 1396 = prism' reviewer remitter 1397 where 1398 reviewer = PrefixPatSyn 1399 remitter (PrefixPatSyn x) = Just x 1400 remitter _ = Nothing 1401 1402_InfixPatSyn :: Prism' PatSynArgs (Name, Name) 1403_InfixPatSyn 1404 = prism' reviewer remitter 1405 where 1406 reviewer (x, y) = InfixPatSyn x y 1407 remitter (InfixPatSyn x y) = Just (x, y) 1408 remitter _ = Nothing 1409 1410_RecordPatSyn :: Prism' PatSynArgs [Name] 1411_RecordPatSyn 1412 = prism' reviewer remitter 1413 where 1414 reviewer = RecordPatSyn 1415 remitter (RecordPatSyn x) = Just x 1416 remitter _ = Nothing 1417#endif 1418 1419-- | 1420-- @ 1421-- _NormalC :: 'Prism'' 'Con' ('Name', ['BangType']) -- template-haskell-2.11+ 1422-- _NormalC :: 'Prism'' 'Con' ('Name', ['StrictType']) -- Earlier versions 1423-- @ 1424_NormalC :: 1425 Prism' Con ( Name 1426#if MIN_VERSION_template_haskell(2,11,0) 1427 , [BangType] 1428#else 1429 , [StrictType] 1430#endif 1431 ) 1432_NormalC 1433 = prism' reviewer remitter 1434 where 1435 reviewer (x, y) = NormalC x y 1436 remitter (NormalC x y) = Just (x, y) 1437 remitter _ = Nothing 1438 1439-- | 1440-- @ 1441-- _RecC :: 'Prism'' 'Con' ('Name', ['VarBangType']) -- template-haskell-2.11+ 1442-- _RecC :: 'Prism'' 'Con' ('Name', ['VarStrictType']) -- Earlier versions 1443-- @ 1444_RecC :: 1445 Prism' Con ( Name 1446#if MIN_VERSION_template_haskell(2,11,0) 1447 , [VarBangType] 1448#else 1449 , [VarStrictType] 1450#endif 1451 ) 1452_RecC 1453 = prism' reviewer remitter 1454 where 1455 reviewer (x, y) = RecC x y 1456 remitter (RecC x y) = Just (x, y) 1457 remitter _ = Nothing 1458 1459-- | 1460-- @ 1461-- _InfixC :: 'Prism'' 'Con' ('BangType', 'Name', 'BangType') -- template-haskell-2.11+ 1462-- _InfixC :: 'Prism'' 'Con' ('StrictType', 'Name', 'StrictType') -- Earlier versions 1463-- @ 1464_InfixC :: 1465 Prism' Con 1466#if MIN_VERSION_template_haskell(2,11,0) 1467 (BangType, Name, BangType ) 1468#else 1469 (StrictType, Name, StrictType) 1470#endif 1471_InfixC 1472 = prism' reviewer remitter 1473 where 1474 reviewer (x, y, z) = InfixC x y z 1475 remitter (InfixC x y z) = Just (x, y, z) 1476 remitter _ = Nothing 1477 1478_ForallC :: Prism' Con ([TyVarBndrSpec], Cxt, Con) 1479_ForallC 1480 = prism' reviewer remitter 1481 where 1482 reviewer (x, y, z) = ForallC x y z 1483 remitter (ForallC x y z) = Just (x, y, z) 1484 remitter _ = Nothing 1485 1486#if MIN_VERSION_template_haskell(2,11,0) 1487_GadtC :: Prism' Con ([Name], [BangType], Type) 1488_GadtC 1489 = prism' reviewer remitter 1490 where 1491 reviewer (x, y, z) = GadtC x y z 1492 remitter (GadtC x y z) = Just (x, y, z) 1493 remitter _ = Nothing 1494 1495_RecGadtC :: Prism' Con ([Name], [VarBangType], Type) 1496_RecGadtC 1497 = prism' reviewer remitter 1498 where 1499 reviewer (x, y, z) = RecGadtC x y z 1500 remitter (RecGadtC x y z) = Just (x, y, z) 1501 remitter _ = Nothing 1502#endif 1503 1504#if MIN_VERSION_template_haskell(2,11,0) 1505_NoSourceUnpackedness :: Prism' SourceUnpackedness () 1506_NoSourceUnpackedness 1507 = prism' reviewer remitter 1508 where 1509 reviewer () = NoSourceUnpackedness 1510 remitter NoSourceUnpackedness = Just () 1511 remitter _ = Nothing 1512 1513_SourceNoUnpack :: Prism' SourceUnpackedness () 1514_SourceNoUnpack 1515 = prism' reviewer remitter 1516 where 1517 reviewer () = SourceNoUnpack 1518 remitter SourceNoUnpack = Just () 1519 remitter _ = Nothing 1520 1521_SourceUnpack :: Prism' SourceUnpackedness () 1522_SourceUnpack 1523 = prism' reviewer remitter 1524 where 1525 reviewer () = SourceUnpack 1526 remitter SourceUnpack = Just () 1527 remitter _ = Nothing 1528 1529_NoSourceStrictness :: Prism' SourceStrictness () 1530_NoSourceStrictness 1531 = prism' reviewer remitter 1532 where 1533 reviewer () = NoSourceStrictness 1534 remitter NoSourceStrictness = Just () 1535 remitter _ = Nothing 1536 1537_SourceLazy :: Prism' SourceStrictness () 1538_SourceLazy 1539 = prism' reviewer remitter 1540 where 1541 reviewer () = SourceLazy 1542 remitter SourceLazy = Just () 1543 remitter _ = Nothing 1544 1545_SourceStrict :: Prism' SourceStrictness () 1546_SourceStrict 1547 = prism' reviewer remitter 1548 where 1549 reviewer () = SourceStrict 1550 remitter SourceStrict = Just () 1551 remitter _ = Nothing 1552 1553_DecidedLazy :: Prism' DecidedStrictness () 1554_DecidedLazy 1555 = prism' reviewer remitter 1556 where 1557 reviewer () = DecidedLazy 1558 remitter DecidedLazy = Just () 1559 remitter _ = Nothing 1560 1561_DecidedStrict :: Prism' DecidedStrictness () 1562_DecidedStrict 1563 = prism' reviewer remitter 1564 where 1565 reviewer () = DecidedStrict 1566 remitter DecidedStrict = Just () 1567 remitter _ = Nothing 1568 1569_DecidedUnpack :: Prism' DecidedStrictness () 1570_DecidedUnpack 1571 = prism' reviewer remitter 1572 where 1573 reviewer () = DecidedUnpack 1574 remitter DecidedUnpack = Just () 1575 remitter _ = Nothing 1576#else 1577_IsStrict :: Prism' Strict () 1578_IsStrict 1579 = prism' reviewer remitter 1580 where 1581 reviewer () = IsStrict 1582 remitter IsStrict = Just () 1583 remitter _ = Nothing 1584 1585_NotStrict :: Prism' Strict () 1586_NotStrict 1587 = prism' reviewer remitter 1588 where 1589 reviewer () = NotStrict 1590 remitter NotStrict = Just () 1591 remitter _ = Nothing 1592 1593_Unpacked :: Prism' Strict () 1594_Unpacked 1595 = prism' reviewer remitter 1596 where 1597 reviewer () = Unpacked 1598 remitter Unpacked = Just () 1599 remitter _ = Nothing 1600#endif 1601 1602_ImportF :: Prism' Foreign (Callconv, Safety, String, Name, Type) 1603_ImportF 1604 = prism' reviewer remitter 1605 where 1606 reviewer (x, y, z, w, u) = ImportF x y z w u 1607 remitter (ImportF x y z w u) = Just (x,y,z,w,u) 1608 remitter _ = Nothing 1609 1610_ExportF :: Prism' Foreign (Callconv, String, Name, Type) 1611_ExportF 1612 = prism' reviewer remitter 1613 where 1614 reviewer (x, y, z, w) = ExportF x y z w 1615 remitter (ExportF x y z w) = Just (x, y, z, w) 1616 remitter _ = Nothing 1617 1618_CCall :: Prism' Callconv () 1619_CCall 1620 = prism' reviewer remitter 1621 where 1622 reviewer () = CCall 1623 remitter CCall = Just () 1624 remitter _ = Nothing 1625 1626_StdCall :: Prism' Callconv () 1627_StdCall 1628 = prism' reviewer remitter 1629 where 1630 reviewer () = StdCall 1631 remitter StdCall = Just () 1632 remitter _ = Nothing 1633 1634#if MIN_VERSION_template_haskell(2,10,0) 1635_CApi :: Prism' Callconv () 1636_CApi 1637 = prism' reviewer remitter 1638 where 1639 reviewer () = CApi 1640 remitter CApi = Just () 1641 remitter _ = Nothing 1642 1643_Prim :: Prism' Callconv () 1644_Prim 1645 = prism' reviewer remitter 1646 where 1647 reviewer () = Prim 1648 remitter Prim = Just () 1649 remitter _ = Nothing 1650 1651_JavaScript :: Prism' Callconv () 1652_JavaScript 1653 = prism' reviewer remitter 1654 where 1655 reviewer () = JavaScript 1656 remitter JavaScript = Just () 1657 remitter _ = Nothing 1658#endif 1659 1660_Unsafe :: Prism' Safety () 1661_Unsafe 1662 = prism' reviewer remitter 1663 where 1664 reviewer () = Unsafe 1665 remitter Unsafe = Just () 1666 remitter _ = Nothing 1667 1668_Safe :: Prism' Safety () 1669_Safe 1670 = prism' reviewer remitter 1671 where 1672 reviewer () = Safe 1673 remitter Safe = Just () 1674 remitter _ = Nothing 1675 1676_Interruptible :: Prism' Safety () 1677_Interruptible 1678 = prism' reviewer remitter 1679 where 1680 reviewer () = Interruptible 1681 remitter Interruptible = Just () 1682 remitter _ = Nothing 1683 1684_InlineP :: Prism' Pragma (Name, Inline, RuleMatch, Phases) 1685_InlineP 1686 = prism' reviewer remitter 1687 where 1688 reviewer (x, y, z, w) = InlineP x y z w 1689 remitter (InlineP x y z w) = Just (x, y, z, w) 1690 remitter _ = Nothing 1691 1692_SpecialiseP :: Prism' Pragma (Name, Type, Maybe Inline, Phases) 1693_SpecialiseP 1694 = prism' reviewer remitter 1695 where 1696 reviewer (x, y, z, w) = SpecialiseP x y z w 1697 remitter (SpecialiseP x y z w) = Just (x, y, z, w) 1698 remitter _ = Nothing 1699 1700-- TODO add lenses for InlineSpec 1701 1702_SpecialiseInstP :: Prism' Pragma Type 1703_SpecialiseInstP 1704 = prism' reviewer remitter 1705 where 1706 reviewer = SpecialiseInstP 1707 remitter (SpecialiseInstP x) = Just x 1708 remitter _ = Nothing 1709 1710-- | 1711-- @ 1712-- _RuleP :: 'Prism'' 'Pragma' ('String', 'Maybe' ['TyVarBndrUnit'], ['RuleBndr'], 'Exp', 'Exp', 'Phases') -- template-haskell-2.15+ 1713-- _RuleP :: 'Prism'' 'Pragma' ('String', ['RuleBndr'], 'Exp', 'Exp', 'Phases') -- Earlier versions 1714-- @ 1715#if MIN_VERSION_template_haskell(2,15,0) 1716_RuleP :: Prism' Pragma (String, Maybe [TyVarBndrUnit], [RuleBndr], Exp, Exp, Phases) 1717_RuleP 1718 = prism' reviewer remitter 1719 where 1720 reviewer (x, y, z, w, u, v) = RuleP x y z w u v 1721 remitter (RuleP x y z w u v) = Just (x, y, z, w, u, v) 1722 remitter _ = Nothing 1723#else 1724_RuleP :: Prism' Pragma (String, [RuleBndr], Exp, Exp, Phases) 1725_RuleP 1726 = prism' reviewer remitter 1727 where 1728 reviewer (x, y, z, w, u) = RuleP x y z w u 1729 remitter (RuleP x y z w u) = Just (x, y, z, w, u) 1730 remitter _ = Nothing 1731#endif 1732 1733_AnnP :: Prism' Pragma (AnnTarget, Exp) 1734_AnnP 1735 = prism' reviewer remitter 1736 where 1737 reviewer (x, y) = AnnP x y 1738 remitter (AnnP x y) = Just (x, y) 1739 remitter _ = Nothing 1740 1741#if MIN_VERSION_template_haskell(2,10,0) 1742_LineP :: Prism' Pragma (Int, String) 1743_LineP 1744 = prism' reviewer remitter 1745 where 1746 reviewer (x, y) = LineP x y 1747 remitter (LineP x y) = Just (x, y) 1748 remitter _ = Nothing 1749#endif 1750 1751#if MIN_VERSION_template_haskell(2,12,0) 1752_CompleteP :: Prism' Pragma ([Name], Maybe Name) 1753_CompleteP 1754 = prism' reviewer remitter 1755 where 1756 reviewer (x, y) = CompleteP x y 1757 remitter (CompleteP x y) = Just (x, y) 1758 remitter _ = Nothing 1759#endif 1760 1761_NoInline :: Prism' Inline () 1762_NoInline 1763 = prism' reviewer remitter 1764 where 1765 reviewer () = NoInline 1766 remitter NoInline = Just () 1767 remitter _ = Nothing 1768 1769_Inline :: Prism' Inline () 1770_Inline 1771 = prism' reviewer remitter 1772 where 1773 reviewer () = Inline 1774 remitter Inline = Just () 1775 remitter _ = Nothing 1776 1777_Inlinable :: Prism' Inline () 1778_Inlinable 1779 = prism' reviewer remitter 1780 where 1781 reviewer () = Inlinable 1782 remitter Inlinable = Just () 1783 remitter _ = Nothing 1784 1785_ConLike :: Prism' RuleMatch () 1786_ConLike 1787 = prism' reviewer remitter 1788 where 1789 reviewer () = ConLike 1790 remitter ConLike = Just () 1791 remitter _ = Nothing 1792 1793_FunLike :: Prism' RuleMatch () 1794_FunLike 1795 = prism' reviewer remitter 1796 where 1797 reviewer () = FunLike 1798 remitter FunLike = Just () 1799 remitter _ = Nothing 1800 1801_AllPhases :: Prism' Phases () 1802_AllPhases 1803 = prism' reviewer remitter 1804 where 1805 reviewer () = AllPhases 1806 remitter AllPhases = Just () 1807 remitter _ = Nothing 1808 1809_FromPhase :: Prism' Phases Int 1810_FromPhase 1811 = prism' reviewer remitter 1812 where 1813 reviewer = FromPhase 1814 remitter (FromPhase x) = Just x 1815 remitter _ = Nothing 1816 1817_BeforePhase :: Prism' Phases Int 1818_BeforePhase 1819 = prism' reviewer remitter 1820 where 1821 reviewer = BeforePhase 1822 remitter (BeforePhase x) = Just x 1823 remitter _ = Nothing 1824 1825_RuleVar :: Prism' RuleBndr Name 1826_RuleVar 1827 = prism' reviewer remitter 1828 where 1829 reviewer = RuleVar 1830 remitter (RuleVar x) = Just x 1831 remitter _ = Nothing 1832 1833_TypedRuleVar :: Prism' RuleBndr (Name, Type) 1834_TypedRuleVar 1835 = prism' reviewer remitter 1836 where 1837 reviewer (x, y) = TypedRuleVar x y 1838 remitter (TypedRuleVar x y) = Just (x, y) 1839 remitter _ = Nothing 1840 1841_ModuleAnnotation :: Prism' AnnTarget () 1842_ModuleAnnotation 1843 = prism' reviewer remitter 1844 where 1845 reviewer () = ModuleAnnotation 1846 remitter ModuleAnnotation = Just () 1847 remitter _ = Nothing 1848 1849_TypeAnnotation :: Prism' AnnTarget Name 1850_TypeAnnotation 1851 = prism' reviewer remitter 1852 where 1853 reviewer = TypeAnnotation 1854 remitter (TypeAnnotation x) = Just x 1855 remitter _ = Nothing 1856 1857_ValueAnnotation :: Prism' AnnTarget Name 1858_ValueAnnotation 1859 = prism' reviewer remitter 1860 where 1861 reviewer = ValueAnnotation 1862 remitter (ValueAnnotation x) = Just x 1863 remitter _ = Nothing 1864 1865_FunDep :: Iso' FunDep ([Name], [Name]) 1866_FunDep 1867 = iso remitter reviewer 1868 where 1869 reviewer (x, y) = FunDep x y 1870 remitter (FunDep x y) = (x, y) 1871 1872#if !(MIN_VERSION_template_haskell(2,13,0)) 1873_TypeFam :: Prism' FamFlavour () 1874_TypeFam 1875 = prism' reviewer remitter 1876 where 1877 reviewer () = TypeFam 1878 remitter TypeFam = Just () 1879 remitter _ = Nothing 1880 1881_DataFam :: Prism' FamFlavour () 1882_DataFam 1883 = prism' reviewer remitter 1884 where 1885 reviewer () = DataFam 1886 remitter DataFam = Just () 1887 remitter _ = Nothing 1888#endif 1889 1890#if MIN_VERSION_template_haskell(2,15,0) 1891tySynEqnLHS :: Lens' TySynEqn Type 1892tySynEqnLHS = lens g s where 1893 g (TySynEqn _ lhs _) = lhs 1894 s (TySynEqn mtvbs _ rhs) lhs = TySynEqn mtvbs lhs rhs 1895 1896tySynEqnPatterns :: Lens' TySynEqn [Type] 1897tySynEqnPatterns = lens g s where 1898 g (TySynEqn _ lhs _) = pats 1899 where (_n, pats) = unfoldType lhs 1900 s (TySynEqn mtvbs lhs rhs) pats = TySynEqn mtvbs (F.foldl' AppT n pats) rhs 1901 where (n, _pats) = unfoldType lhs 1902 1903tySynEqnResult :: Lens' TySynEqn Type 1904tySynEqnResult = lens g s where 1905 g (TySynEqn _ _ rhs) = rhs 1906 s (TySynEqn mtvbs lhs _) = TySynEqn mtvbs lhs 1907#else 1908tySynEqnPatterns :: Lens' TySynEqn [Type] 1909tySynEqnPatterns = lens g s where 1910 g (TySynEqn xs _) = xs 1911 s (TySynEqn _ y) xs = TySynEqn xs y 1912 1913tySynEqnResult :: Lens' TySynEqn Type 1914tySynEqnResult = lens g s where 1915 g (TySynEqn _ x) = x 1916 s (TySynEqn xs _) = TySynEqn xs 1917#endif 1918 1919_InfixL :: Prism' FixityDirection () 1920_InfixL 1921 = prism' reviewer remitter 1922 where 1923 reviewer () = InfixL 1924 remitter InfixL = Just () 1925 remitter _ = Nothing 1926 1927_InfixR :: Prism' FixityDirection () 1928_InfixR 1929 = prism' reviewer remitter 1930 where 1931 reviewer () = InfixR 1932 remitter InfixR = Just () 1933 remitter _ = Nothing 1934 1935_InfixN :: Prism' FixityDirection () 1936_InfixN 1937 = prism' reviewer remitter 1938 where 1939 reviewer () = InfixN 1940 remitter InfixN = Just () 1941 remitter _ = Nothing 1942 1943_VarE :: Prism' Exp Name 1944_VarE 1945 = prism' reviewer remitter 1946 where 1947 reviewer = VarE 1948 remitter (VarE x) = Just x 1949 remitter _ = Nothing 1950 1951_ConE :: Prism' Exp Name 1952_ConE 1953 = prism' reviewer remitter 1954 where 1955 reviewer = ConE 1956 remitter (ConE x) = Just x 1957 remitter _ = Nothing 1958 1959_LitE :: Prism' Exp Lit 1960_LitE 1961 = prism' reviewer remitter 1962 where 1963 reviewer = LitE 1964 remitter (LitE x) = Just x 1965 remitter _ = Nothing 1966 1967_AppE :: Prism' Exp (Exp, Exp) 1968_AppE 1969 = prism' reviewer remitter 1970 where 1971 reviewer (x, y) = AppE x y 1972 remitter (AppE x y) = Just (x, y) 1973 remitter _ = Nothing 1974 1975#if MIN_VERSION_template_haskell(2,12,0) 1976_AppTypeE :: Prism' Exp (Exp, Type) 1977_AppTypeE 1978 = prism' reviewer remitter 1979 where 1980 reviewer (x, y) = AppTypeE x y 1981 remitter (AppTypeE x y) = Just (x, y) 1982 remitter _ = Nothing 1983#endif 1984 1985_InfixE :: Prism' Exp (Maybe Exp, Exp, Maybe Exp) 1986_InfixE 1987 = prism' reviewer remitter 1988 where 1989 reviewer (x, y, z) = InfixE x y z 1990 remitter (InfixE x y z) = Just (x, y, z) 1991 remitter _ = Nothing 1992 1993_UInfixE :: Prism' Exp (Exp, Exp, Exp) 1994_UInfixE 1995 = prism' reviewer remitter 1996 where 1997 reviewer (x, y, z) = UInfixE x y z 1998 remitter (UInfixE x y z) = Just (x, y, z) 1999 remitter _ = Nothing 2000 2001_ParensE :: Prism' Exp Exp 2002_ParensE 2003 = prism' reviewer remitter 2004 where 2005 reviewer = ParensE 2006 remitter (ParensE x) = Just x 2007 remitter _ = Nothing 2008 2009_LamE :: Prism' Exp ([Pat], Exp) 2010_LamE 2011 = prism' reviewer remitter 2012 where 2013 reviewer (x, y) = LamE x y 2014 remitter (LamE x y) = Just (x, y) 2015 remitter _ = Nothing 2016 2017_LamCaseE :: Prism' Exp [Match] 2018_LamCaseE 2019 = prism' reviewer remitter 2020 where 2021 reviewer = LamCaseE 2022 remitter (LamCaseE x) = Just x 2023 remitter _ = Nothing 2024 2025-- | 2026-- @ 2027-- _TupE :: 'Prism'' 'Exp' ['Maybe' 'Exp'] -- template-haskell-2.16+ 2028-- _TupE :: 'Prism'' 'Exp' ['Exp'] -- Earlier versions 2029-- @ 2030#if MIN_VERSION_template_haskell(2,16,0) 2031_TupE :: Prism' Exp [Maybe Exp] 2032#else 2033_TupE :: Prism' Exp [Exp] 2034#endif 2035_TupE 2036 = prism' reviewer remitter 2037 where 2038 reviewer = TupE 2039 remitter (TupE x) = Just x 2040 remitter _ = Nothing 2041 2042-- | 2043-- @ 2044-- _UnboxedTupE :: 'Prism'' 'Exp' ['Maybe' 'Exp'] -- template-haskell-2.16+ 2045-- _UnboxedTupE :: 'Prism'' 'Exp' ['Exp'] -- Earlier versions 2046-- @ 2047#if MIN_VERSION_template_haskell(2,16,0) 2048_UnboxedTupE :: Prism' Exp [Maybe Exp] 2049#else 2050_UnboxedTupE :: Prism' Exp [Exp] 2051#endif 2052_UnboxedTupE 2053 = prism' reviewer remitter 2054 where 2055 reviewer = UnboxedTupE 2056 remitter (UnboxedTupE x) = Just x 2057 remitter _ = Nothing 2058 2059#if MIN_VERSION_template_haskell(2,12,0) 2060_UnboxedSumE :: Prism' Exp (Exp, SumAlt, SumArity) 2061_UnboxedSumE 2062 = prism' reviewer remitter 2063 where 2064 reviewer (x, y, z) = UnboxedSumE x y z 2065 remitter (UnboxedSumE x y z) = Just (x, y, z) 2066 remitter _ = Nothing 2067#endif 2068 2069_CondE :: Prism' Exp (Exp, Exp, Exp) 2070_CondE 2071 = prism' reviewer remitter 2072 where 2073 reviewer (x, y, z) = CondE x y z 2074 remitter (CondE x y z) = Just (x, y, z) 2075 remitter _ = Nothing 2076 2077_MultiIfE :: Prism' Exp [(Guard, Exp)] 2078_MultiIfE 2079 = prism' reviewer remitter 2080 where 2081 reviewer = MultiIfE 2082 remitter (MultiIfE x) = Just x 2083 remitter _ = Nothing 2084 2085_LetE :: Prism' Exp ([Dec], Exp) 2086_LetE 2087 = prism' reviewer remitter 2088 where 2089 reviewer (x, y) = LetE x y 2090 remitter (LetE x y) = Just (x, y) 2091 remitter _ = Nothing 2092 2093_CaseE :: Prism' Exp (Exp, [Match]) 2094_CaseE 2095 = prism' reviewer remitter 2096 where 2097 reviewer (x, y) = CaseE x y 2098 remitter (CaseE x y) = Just (x, y) 2099 remitter _ = Nothing 2100 2101-- | 2102-- @ 2103-- _DoE :: 'Prism'' 'Exp' ('Maybe' 'ModName', ['Stmt']) -- template-haskell-2.17+ 2104-- _DoE :: 'Prism'' 'Exp' ['Stmt'] -- Earlier versions 2105-- @ 2106# if MIN_VERSION_template_haskell(2,17,0) 2107_DoE :: Prism' Exp (Maybe ModName, [Stmt]) 2108_DoE 2109 = prism' reviewer remitter 2110 where 2111 reviewer (x, y) = DoE x y 2112 remitter (DoE x y) = Just (x, y) 2113 remitter _ = Nothing 2114# else 2115_DoE :: Prism' Exp [Stmt] 2116_DoE 2117 = prism' reviewer remitter 2118 where 2119 reviewer = DoE 2120 remitter (DoE x) = Just x 2121 remitter _ = Nothing 2122# endif 2123 2124_CompE :: Prism' Exp [Stmt] 2125_CompE 2126 = prism' reviewer remitter 2127 where 2128 reviewer = CompE 2129 remitter (CompE x) = Just x 2130 remitter _ = Nothing 2131 2132_ArithSeqE :: Prism' Exp Range 2133_ArithSeqE 2134 = prism' reviewer remitter 2135 where 2136 reviewer = ArithSeqE 2137 remitter (ArithSeqE x) = Just x 2138 remitter _ = Nothing 2139 2140_ListE :: Prism' Exp [Exp] 2141_ListE 2142 = prism' reviewer remitter 2143 where 2144 reviewer = ListE 2145 remitter (ListE x) = Just x 2146 remitter _ = Nothing 2147 2148_SigE :: Prism' Exp (Exp, Type) 2149_SigE 2150 = prism' reviewer remitter 2151 where 2152 reviewer (x, y) = SigE x y 2153 remitter (SigE x y) = Just (x, y) 2154 remitter _ = Nothing 2155 2156_RecConE :: Prism' Exp (Name, [FieldExp]) 2157_RecConE 2158 = prism' reviewer remitter 2159 where 2160 reviewer (x, y) = RecConE x y 2161 remitter (RecConE x y) = Just (x, y) 2162 remitter _ = Nothing 2163 2164_RecUpdE :: Prism' Exp (Exp, [FieldExp]) 2165_RecUpdE 2166 = prism' reviewer remitter 2167 where 2168 reviewer (x, y) = RecUpdE x y 2169 remitter (RecUpdE x y) = Just (x, y) 2170 remitter _ = Nothing 2171 2172#if MIN_VERSION_template_haskell(2,10,0) 2173_StaticE :: Prism' Exp Exp 2174_StaticE 2175 = prism' reviewer remitter 2176 where 2177 reviewer = StaticE 2178 remitter (StaticE x) = Just x 2179 remitter _ = Nothing 2180#endif 2181 2182#if MIN_VERSION_template_haskell(2,11,0) 2183_UnboundVarE :: Prism' Exp Name 2184_UnboundVarE 2185 = prism' reviewer remitter 2186 where 2187 reviewer = UnboundVarE 2188 remitter (UnboundVarE x) = Just x 2189 remitter _ = Nothing 2190#endif 2191 2192#if MIN_VERSION_template_haskell(2,13,0) 2193_LabelE :: Prism' Exp String 2194_LabelE 2195 = prism' reviewer remitter 2196 where 2197 reviewer = LabelE 2198 remitter (LabelE x) = Just x 2199 remitter _ = Nothing 2200#endif 2201 2202#if MIN_VERSION_template_haskell(2,15,0) 2203-- | 2204-- @ 2205-- _MDoE :: 'Prism'' 'Exp' ('Maybe' 'ModName', ['Stmt']) -- template-haskell-2.17+ 2206-- _MDoE :: 'Prism'' 'Exp' ['Stmt'] -- Earlier versions 2207-- @ 2208# if MIN_VERSION_template_haskell(2,17,0) 2209_MDoE :: Prism' Exp (Maybe ModName, [Stmt]) 2210_MDoE 2211 = prism' reviewer remitter 2212 where 2213 reviewer (x, y) = MDoE x y 2214 remitter (MDoE x y) = Just (x, y) 2215 remitter _ = Nothing 2216# else 2217_MDoE :: Prism' Exp [Stmt] 2218_MDoE 2219 = prism' reviewer remitter 2220 where 2221 reviewer = MDoE 2222 remitter (MDoE x) = Just x 2223 remitter _ = Nothing 2224# endif 2225 2226_ImplicitParamVarE :: Prism' Exp String 2227_ImplicitParamVarE 2228 = prism' reviewer remitter 2229 where 2230 reviewer = ImplicitParamVarE 2231 remitter (ImplicitParamVarE x) = Just x 2232 remitter _ = Nothing 2233#endif 2234 2235_GuardedB :: Prism' Body [(Guard, Exp)] 2236_GuardedB 2237 = prism' reviewer remitter 2238 where 2239 reviewer = GuardedB 2240 remitter (GuardedB x) = Just x 2241 remitter _ = Nothing 2242 2243_NormalB :: Prism' Body Exp 2244_NormalB 2245 = prism' reviewer remitter 2246 where 2247 reviewer = NormalB 2248 remitter (NormalB x) = Just x 2249 remitter _ = Nothing 2250 2251_NormalG :: Prism' Guard Exp 2252_NormalG 2253 = prism' reviewer remitter 2254 where 2255 reviewer = NormalG 2256 remitter (NormalG x) = Just x 2257 remitter _ = Nothing 2258 2259_PatG :: Prism' Guard [Stmt] 2260_PatG 2261 = prism' reviewer remitter 2262 where 2263 reviewer = PatG 2264 remitter (PatG x) = Just x 2265 remitter _ = Nothing 2266 2267_BindS :: Prism' Stmt (Pat, Exp) 2268_BindS 2269 = prism' reviewer remitter 2270 where 2271 reviewer (x, y) = BindS x y 2272 remitter (BindS x y) = Just (x, y) 2273 remitter _ = Nothing 2274 2275_LetS :: Prism' Stmt [Dec] 2276_LetS 2277 = prism' reviewer remitter 2278 where 2279 reviewer = LetS 2280 remitter (LetS x) = Just x 2281 remitter _ = Nothing 2282 2283_NoBindS :: Prism' Stmt Exp 2284_NoBindS 2285 = prism' reviewer remitter 2286 where 2287 reviewer = NoBindS 2288 remitter (NoBindS x) = Just x 2289 remitter _ = Nothing 2290 2291_ParS :: Prism' Stmt [[Stmt]] 2292_ParS 2293 = prism' reviewer remitter 2294 where 2295 reviewer = ParS 2296 remitter (ParS x) = Just x 2297 remitter _ = Nothing 2298 2299#if MIN_VERSION_template_haskell(2,15,0) 2300_RecS :: Prism' Stmt [Stmt] 2301_RecS 2302 = prism' reviewer remitter 2303 where 2304 reviewer = RecS 2305 remitter (RecS x) = Just x 2306 remitter _ = Nothing 2307#endif 2308 2309_FromR :: Prism' Range Exp 2310_FromR 2311 = prism' reviewer remitter 2312 where 2313 reviewer = FromR 2314 remitter (FromR x) = Just x 2315 remitter _ = Nothing 2316 2317_FromThenR :: Prism' Range (Exp, Exp) 2318_FromThenR 2319 = prism' reviewer remitter 2320 where 2321 reviewer (x, y) = FromThenR x y 2322 remitter (FromThenR x y) = Just (x, y) 2323 remitter _ = Nothing 2324 2325_FromToR :: Prism' Range (Exp, Exp) 2326_FromToR 2327 = prism' reviewer remitter 2328 where 2329 reviewer (x, y) = FromToR x y 2330 remitter (FromToR x y) = Just (x, y) 2331 remitter _ = Nothing 2332 2333_FromThenToR :: Prism' Range (Exp, Exp, Exp) 2334_FromThenToR 2335 = prism' reviewer remitter 2336 where 2337 reviewer (x, y, z) = FromThenToR x y z 2338 remitter (FromThenToR x y z) = Just (x, y, z) 2339 remitter _ = Nothing 2340 2341_CharL :: Prism' Lit Char 2342_CharL 2343 = prism' reviewer remitter 2344 where 2345 reviewer = CharL 2346 remitter (CharL x) = Just x 2347 remitter _ = Nothing 2348 2349_StringL :: Prism' Lit String 2350_StringL 2351 = prism' reviewer remitter 2352 where 2353 reviewer = StringL 2354 remitter (StringL x) = Just x 2355 remitter _ = Nothing 2356 2357_IntegerL :: Prism' Lit Integer 2358_IntegerL 2359 = prism' reviewer remitter 2360 where 2361 reviewer = IntegerL 2362 remitter (IntegerL x) = Just x 2363 remitter _ = Nothing 2364 2365_RationalL :: Prism' Lit Rational 2366_RationalL 2367 = prism' reviewer remitter 2368 where 2369 reviewer = RationalL 2370 remitter (RationalL x) = Just x 2371 remitter _ = Nothing 2372 2373_IntPrimL :: Prism' Lit Integer 2374_IntPrimL 2375 = prism' reviewer remitter 2376 where 2377 reviewer = IntPrimL 2378 remitter (IntPrimL x) = Just x 2379 remitter _ = Nothing 2380 2381_WordPrimL :: Prism' Lit Integer 2382_WordPrimL 2383 = prism' reviewer remitter 2384 where 2385 reviewer = WordPrimL 2386 remitter (WordPrimL x) = Just x 2387 remitter _ = Nothing 2388 2389_FloatPrimL :: Prism' Lit Rational 2390_FloatPrimL 2391 = prism' reviewer remitter 2392 where 2393 reviewer = FloatPrimL 2394 remitter (FloatPrimL x) = Just x 2395 remitter _ = Nothing 2396 2397_DoublePrimL :: Prism' Lit Rational 2398_DoublePrimL 2399 = prism' reviewer remitter 2400 where 2401 reviewer = DoublePrimL 2402 remitter (DoublePrimL x) = Just x 2403 remitter _ = Nothing 2404 2405_StringPrimL :: Prism' Lit [Word8] 2406_StringPrimL 2407 = prism' reviewer remitter 2408 where 2409 reviewer = StringPrimL 2410 remitter (StringPrimL x) = Just x 2411 remitter _ = Nothing 2412 2413#if MIN_VERSION_template_haskell(2,11,0) 2414_CharPrimL :: Prism' Lit Char 2415_CharPrimL 2416 = prism' reviewer remitter 2417 where 2418 reviewer = CharPrimL 2419 remitter (CharPrimL x) = Just x 2420 remitter _ = Nothing 2421#endif 2422 2423#if MIN_VERSION_template_haskell(2,16,0) 2424_BytesPrimL :: Prism' Lit Bytes 2425_BytesPrimL 2426 = prism' reviewer remitter 2427 where 2428 reviewer = BytesPrimL 2429 remitter (BytesPrimL x) = Just x 2430 remitter _ = Nothing 2431#endif 2432 2433_LitP :: Prism' Pat Lit 2434_LitP 2435 = prism' reviewer remitter 2436 where 2437 reviewer = LitP 2438 remitter (LitP x) = Just x 2439 remitter _ = Nothing 2440 2441_VarP :: Prism' Pat Name 2442_VarP 2443 = prism' reviewer remitter 2444 where 2445 reviewer = VarP 2446 remitter (VarP x) = Just x 2447 remitter _ = Nothing 2448 2449_TupP :: Prism' Pat [Pat] 2450_TupP 2451 = prism' reviewer remitter 2452 where 2453 reviewer = TupP 2454 remitter (TupP x) = Just x 2455 remitter _ = Nothing 2456 2457_UnboxedTupP :: Prism' Pat [Pat] 2458_UnboxedTupP 2459 = prism' reviewer remitter 2460 where 2461 reviewer = UnboxedTupP 2462 remitter (UnboxedTupP x) = Just x 2463 remitter _ = Nothing 2464 2465#if MIN_VERSION_template_haskell(2,12,0) 2466_UnboxedSumP :: Prism' Pat (Pat, SumAlt, SumArity) 2467_UnboxedSumP 2468 = prism' reviewer remitter 2469 where 2470 reviewer (x, y, z) = UnboxedSumP x y z 2471 remitter (UnboxedSumP x y z) = Just (x, y, z) 2472 remitter _ = Nothing 2473#endif 2474 2475_ConP :: Prism' Pat (Name, [Pat]) 2476_ConP 2477 = prism' reviewer remitter 2478 where 2479 reviewer (x, y) = ConP x y 2480 remitter (ConP x y) = Just (x, y) 2481 remitter _ = Nothing 2482 2483_InfixP :: Prism' Pat (Pat, Name, Pat) 2484_InfixP 2485 = prism' reviewer remitter 2486 where 2487 reviewer (x, y, z) = InfixP x y z 2488 remitter (InfixP x y z) = Just (x, y, z) 2489 remitter _ = Nothing 2490 2491_UInfixP :: Prism' Pat (Pat, Name, Pat) 2492_UInfixP 2493 = prism' reviewer remitter 2494 where 2495 reviewer (x, y, z) = UInfixP x y z 2496 remitter (UInfixP x y z) = Just (x, y, z) 2497 remitter _ = Nothing 2498 2499_ParensP :: Prism' Pat Pat 2500_ParensP 2501 = prism' reviewer remitter 2502 where 2503 reviewer = ParensP 2504 remitter (ParensP x) = Just x 2505 remitter _ = Nothing 2506 2507_TildeP :: Prism' Pat Pat 2508_TildeP 2509 = prism' reviewer remitter 2510 where 2511 reviewer = TildeP 2512 remitter (TildeP x) = Just x 2513 remitter _ = Nothing 2514 2515_BangP :: Prism' Pat Pat 2516_BangP 2517 = prism' reviewer remitter 2518 where 2519 reviewer = BangP 2520 remitter (BangP x) = Just x 2521 remitter _ = Nothing 2522 2523_AsP :: Prism' Pat (Name, Pat) 2524_AsP 2525 = prism' reviewer remitter 2526 where 2527 reviewer (x, y) = AsP x y 2528 remitter (AsP x y) = Just (x, y) 2529 remitter _ = Nothing 2530 2531_WildP :: Prism' Pat () 2532_WildP 2533 = prism' reviewer remitter 2534 where 2535 reviewer () = WildP 2536 remitter WildP = Just () 2537 remitter _ = Nothing 2538 2539_RecP :: Prism' Pat (Name, [FieldPat]) 2540_RecP 2541 = prism' reviewer remitter 2542 where 2543 reviewer (x, y) = RecP x y 2544 remitter (RecP x y) = Just (x, y) 2545 remitter _ = Nothing 2546 2547_ListP :: Prism' Pat [Pat] 2548_ListP 2549 = prism' reviewer remitter 2550 where 2551 reviewer = ListP 2552 remitter (ListP x) = Just x 2553 remitter _ = Nothing 2554 2555_SigP :: Prism' Pat (Pat, Type) 2556_SigP 2557 = prism' reviewer remitter 2558 where 2559 reviewer (x, y) = SigP x y 2560 remitter (SigP x y) = Just (x, y) 2561 remitter _ = Nothing 2562 2563_ViewP :: Prism' Pat (Exp, Pat) 2564_ViewP 2565 = prism' reviewer remitter 2566 where 2567 reviewer (x, y) = ViewP x y 2568 remitter (ViewP x y) = Just (x, y) 2569 remitter _ = Nothing 2570 2571_ForallT :: Prism' Type ([TyVarBndrSpec], Cxt, Type) 2572_ForallT 2573 = prism' reviewer remitter 2574 where 2575 reviewer (x, y, z) = ForallT x y z 2576 remitter (ForallT x y z) = Just (x, y, z) 2577 remitter _ = Nothing 2578 2579_AppT :: Prism' Type (Type, Type) 2580_AppT 2581 = prism' reviewer remitter 2582 where 2583 reviewer (x, y) = AppT x y 2584 remitter (AppT x y) = Just (x, y) 2585 remitter _ = Nothing 2586 2587_SigT :: Prism' Type (Type, Kind) 2588_SigT 2589 = prism' reviewer remitter 2590 where 2591 reviewer (x, y) = SigT x y 2592 remitter (SigT x y) = Just (x, y) 2593 remitter _ = Nothing 2594 2595_VarT :: Prism' Type Name 2596_VarT 2597 = prism' reviewer remitter 2598 where 2599 reviewer = VarT 2600 remitter (VarT x) = Just x 2601 remitter _ = Nothing 2602 2603_ConT :: Prism' Type Name 2604_ConT 2605 = prism' reviewer remitter 2606 where 2607 reviewer = ConT 2608 remitter (ConT x) = Just x 2609 remitter _ = Nothing 2610 2611_PromotedT :: Prism' Type Name 2612_PromotedT 2613 = prism' reviewer remitter 2614 where 2615 reviewer = PromotedT 2616 remitter (PromotedT x) = Just x 2617 remitter _ = Nothing 2618 2619_TupleT :: Prism' Type Int 2620_TupleT 2621 = prism' reviewer remitter 2622 where 2623 reviewer = TupleT 2624 remitter (TupleT x) = Just x 2625 remitter _ = Nothing 2626 2627_UnboxedTupleT :: Prism' Type Int 2628_UnboxedTupleT 2629 = prism' reviewer remitter 2630 where 2631 reviewer = UnboxedTupleT 2632 remitter (UnboxedTupleT x) = Just x 2633 remitter _ = Nothing 2634 2635#if MIN_VERSION_template_haskell(2,12,0) 2636_UnboxedSumT :: Prism' Type SumArity 2637_UnboxedSumT 2638 = prism' reviewer remitter 2639 where 2640 reviewer = UnboxedSumT 2641 remitter (UnboxedSumT x) = Just x 2642 remitter _ = Nothing 2643#endif 2644 2645_ArrowT :: Prism' Type () 2646_ArrowT 2647 = prism' reviewer remitter 2648 where 2649 reviewer () = ArrowT 2650 remitter ArrowT = Just () 2651 remitter _ = Nothing 2652 2653#if MIN_VERSION_template_haskell(2,10,0) 2654_EqualityT :: Prism' Type () 2655_EqualityT 2656 = prism' reviewer remitter 2657 where 2658 reviewer () = EqualityT 2659 remitter EqualityT = Just () 2660 remitter _ = Nothing 2661#endif 2662 2663_ListT :: Prism' Type () 2664_ListT 2665 = prism' reviewer remitter 2666 where 2667 reviewer () = ListT 2668 remitter ListT = Just () 2669 remitter _ = Nothing 2670 2671_PromotedTupleT :: Prism' Type Int 2672_PromotedTupleT 2673 = prism' reviewer remitter 2674 where 2675 reviewer = PromotedTupleT 2676 remitter (PromotedTupleT x) = Just x 2677 remitter _ = Nothing 2678 2679_PromotedNilT :: Prism' Type () 2680_PromotedNilT 2681 = prism' reviewer remitter 2682 where 2683 reviewer () = PromotedNilT 2684 remitter PromotedNilT = Just () 2685 remitter _ = Nothing 2686 2687_PromotedConsT :: Prism' Type () 2688_PromotedConsT 2689 = prism' reviewer remitter 2690 where 2691 reviewer () = PromotedConsT 2692 remitter PromotedConsT = Just () 2693 remitter _ = Nothing 2694 2695_StarT :: Prism' Type () 2696_StarT 2697 = prism' reviewer remitter 2698 where 2699 reviewer () = StarT 2700 remitter StarT = Just () 2701 remitter _ = Nothing 2702 2703_ConstraintT :: Prism' Type () 2704_ConstraintT 2705 = prism' reviewer remitter 2706 where 2707 reviewer () = ConstraintT 2708 remitter ConstraintT = Just () 2709 remitter _ = Nothing 2710 2711_LitT :: Prism' Type TyLit 2712_LitT 2713 = prism' reviewer remitter 2714 where 2715 reviewer = LitT 2716 remitter (LitT x) = Just x 2717 remitter _ = Nothing 2718 2719#if MIN_VERSION_template_haskell(2,11,0) 2720_InfixT :: Prism' Type (Type, Name, Type) 2721_InfixT 2722 = prism' reviewer remitter 2723 where 2724 reviewer (x, y, z) = InfixT x y z 2725 remitter (InfixT x y z) = Just (x, y, z) 2726 remitter _ = Nothing 2727 2728_UInfixT :: Prism' Type (Type, Name, Type) 2729_UInfixT 2730 = prism' reviewer remitter 2731 where 2732 reviewer (x, y, z) = UInfixT x y z 2733 remitter (UInfixT x y z) = Just (x, y, z) 2734 remitter _ = Nothing 2735 2736_ParensT :: Prism' Type Type 2737_ParensT 2738 = prism' reviewer remitter 2739 where 2740 reviewer = ParensT 2741 remitter (ParensT x) = Just x 2742 remitter _ = Nothing 2743 2744_WildCardT :: Prism' Type () 2745_WildCardT 2746 = prism' reviewer remitter 2747 where 2748 reviewer () = WildCardT 2749 remitter WildCardT = Just () 2750 remitter _ = Nothing 2751#endif 2752 2753#if MIN_VERSION_template_haskell(2,15,0) 2754_AppKindT :: Prism' Type (Type, Kind) 2755_AppKindT 2756 = prism' reviewer remitter 2757 where 2758 reviewer (x, y) = AppKindT x y 2759 remitter (AppKindT x y) = Just (x, y) 2760 remitter _ = Nothing 2761 2762_ImplicitParamT :: Prism' Type (String, Type) 2763_ImplicitParamT 2764 = prism' reviewer remitter 2765 where 2766 reviewer (x, y) = ImplicitParamT x y 2767 remitter (ImplicitParamT x y) = Just (x, y) 2768 remitter _ = Nothing 2769#endif 2770 2771#if MIN_VERSION_template_haskell(2,16,0) 2772_ForallVisT :: Prism' Type ([TyVarBndrUnit], Type) 2773_ForallVisT 2774 = prism' reviewer remitter 2775 where 2776 reviewer (x, y) = ForallVisT x y 2777 remitter (ForallVisT x y) = Just (x, y) 2778 remitter _ = Nothing 2779#endif 2780 2781#if MIN_VERSION_template_haskell(2,17,0) 2782_MulArrowT :: Prism' Type () 2783_MulArrowT 2784 = prism' reviewer remitter 2785 where 2786 reviewer () = MulArrowT 2787 remitter MulArrowT = Just () 2788 remitter _ = Nothing 2789#endif 2790 2791#if MIN_VERSION_template_haskell(2,17,0) 2792_SpecifiedSpec :: Prism' Specificity () 2793_SpecifiedSpec 2794 = prism' reviewer remitter 2795 where 2796 reviewer () = SpecifiedSpec 2797 remitter SpecifiedSpec = Just () 2798 remitter _ = Nothing 2799 2800_InferredSpec :: Prism' Specificity () 2801_InferredSpec 2802 = prism' reviewer remitter 2803 where 2804 reviewer () = InferredSpec 2805 remitter InferredSpec = Just () 2806 remitter _ = Nothing 2807#endif 2808 2809-- | 2810-- @ 2811-- _PlainTV :: 'Prism'' ('TyVarBndr' flag) ('Name', flag) -- template-haskell-2.17+ 2812-- _PlainTV :: 'Prism'' 'TyVarBndr' 'Name' -- Earlier versions 2813-- @ 2814#if MIN_VERSION_template_haskell(2,17,0) 2815_PlainTV :: Prism' (TyVarBndr flag) (Name, flag) 2816_PlainTV 2817 = prism' reviewer remitter 2818 where 2819 reviewer (x, y) = PlainTV x y 2820 remitter (PlainTV x y) = Just (x, y) 2821 remitter _ = Nothing 2822#else 2823_PlainTV :: Prism' TyVarBndr Name 2824_PlainTV 2825 = prism' reviewer remitter 2826 where 2827 reviewer = PlainTV 2828 remitter (PlainTV x) = Just x 2829 remitter _ = Nothing 2830#endif 2831 2832-- | 2833-- @ 2834-- _KindedTV :: 'Prism'' ('TyVarBndr' flag) ('Name', flag, 'Kind') -- template-haskell-2.17+ 2835-- _KindedTV :: 'Prism'' 'TyVarBndr' ('Name', 'Kind') -- Earlier versions 2836-- @ 2837#if MIN_VERSION_template_haskell(2,17,0) 2838_KindedTV :: Prism' (TyVarBndr flag) (Name, flag, Kind) 2839_KindedTV 2840 = prism' reviewer remitter 2841 where 2842 reviewer (x, y, z) = KindedTV x y z 2843 remitter (KindedTV x y z) = Just (x, y, z) 2844 remitter _ = Nothing 2845#else 2846_KindedTV :: Prism' TyVarBndr (Name, Kind) 2847_KindedTV 2848 = prism' reviewer remitter 2849 where 2850 reviewer (x, y) = KindedTV x y 2851 remitter (KindedTV x y) = Just (x, y) 2852 remitter _ = Nothing 2853#endif 2854 2855#if MIN_VERSION_template_haskell(2,11,0) 2856_NoSig :: Prism' FamilyResultSig () 2857_NoSig 2858 = prism' reviewer remitter 2859 where 2860 reviewer () = NoSig 2861 remitter NoSig = Just () 2862 remitter _ = Nothing 2863 2864_KindSig :: Prism' FamilyResultSig Kind 2865_KindSig 2866 = prism' reviewer remitter 2867 where 2868 reviewer = KindSig 2869 remitter (KindSig x) = Just x 2870 remitter _ = Nothing 2871 2872_TyVarSig :: Prism' FamilyResultSig TyVarBndrUnit 2873_TyVarSig 2874 = prism' reviewer remitter 2875 where 2876 reviewer = TyVarSig 2877 remitter (TyVarSig x) = Just x 2878 remitter _ = Nothing 2879#endif 2880 2881_NumTyLit :: Prism' TyLit Integer 2882_NumTyLit 2883 = prism' reviewer remitter 2884 where 2885 reviewer = NumTyLit 2886 remitter (NumTyLit x) = Just x 2887 remitter _ = Nothing 2888 2889_StrTyLit :: Prism' TyLit String 2890_StrTyLit 2891 = prism' reviewer remitter 2892 where 2893 reviewer = StrTyLit 2894 remitter (StrTyLit x) = Just x 2895 remitter _ = Nothing 2896 2897#if !MIN_VERSION_template_haskell(2,10,0) 2898_ClassP :: Prism' Pred (Name, [Type]) 2899_ClassP 2900 = prism' reviewer remitter 2901 where 2902 reviewer (x, y) = ClassP x y 2903 remitter (ClassP x y) = Just (x, y) 2904 remitter _ = Nothing 2905 2906_EqualP :: Prism' Pred (Type, Type) 2907_EqualP 2908 = prism' reviewer remitter 2909 where 2910 reviewer (x, y) = EqualP x y 2911 remitter (EqualP x y) = Just (x, y) 2912 remitter _ = Nothing 2913#endif 2914 2915_NominalR :: Prism' Role () 2916_NominalR 2917 = prism' reviewer remitter 2918 where 2919 reviewer () = NominalR 2920 remitter NominalR = Just () 2921 remitter _ = Nothing 2922 2923_RepresentationalR :: Prism' Role () 2924_RepresentationalR 2925 = prism' reviewer remitter 2926 where 2927 reviewer () = RepresentationalR 2928 remitter RepresentationalR = Just () 2929 remitter _ = Nothing 2930 2931_PhantomR :: Prism' Role () 2932_PhantomR 2933 = prism' reviewer remitter 2934 where 2935 reviewer () = PhantomR 2936 remitter PhantomR = Just () 2937 remitter _ = Nothing 2938 2939_InferR :: Prism' Role () 2940_InferR 2941 = prism' reviewer remitter 2942 where 2943 reviewer () = InferR 2944 remitter InferR = Just () 2945 remitter _ = Nothing 2946 2947#if MIN_VERSION_template_haskell(2,12,0) 2948_StockStrategy :: Prism' DerivStrategy () 2949_StockStrategy 2950 = prism' reviewer remitter 2951 where 2952 reviewer () = StockStrategy 2953 remitter StockStrategy = Just () 2954 remitter _ = Nothing 2955 2956_AnyclassStrategy :: Prism' DerivStrategy () 2957_AnyclassStrategy 2958 = prism' reviewer remitter 2959 where 2960 reviewer () = AnyclassStrategy 2961 remitter AnyclassStrategy = Just () 2962 remitter _ = Nothing 2963 2964_NewtypeStrategy :: Prism' DerivStrategy () 2965_NewtypeStrategy 2966 = prism' reviewer remitter 2967 where 2968 reviewer () = NewtypeStrategy 2969 remitter NewtypeStrategy = Just () 2970 remitter _ = Nothing 2971#endif 2972