h*}S      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST UVWXYZ[\]^_` abcdefghijklmnopqrstuvwxyz{|} ~                              !""#$$$%%%&&'()))))))))*******+,,--../0.14.1- Trustworthy v;0 Safe-Inferred ;# Safe-Inferred 1 Safe-Inferred  Trustworthy01 Y2 Safe-Inferred 6 Safe-Inferred,fgh*+k3p noqrstu2fgh*+k3p noqrstu*3fgh3 Safe-Inferred,fgh*+k3p noqrstu4 Safe-Inferred)35 Safe-InferredS36 Safe-Inferred{7 Safe-Inferred, Safe-Inferred8 Safe-Inferred Safe-Inferred+9 Safe-Inferred_: Safe-Inferred%; Safe-Inferred%< Safe-Inferredo= Safe-Inferred> Safe-Inferred? Safe-Inferred  Safe-Inferred)1 @ Safe-Inferred1 Safe-InferredO9JM]^_A Safe-Inferred9JM]^_B Safe-Inferred C Safe-Inferred  Safe-Inferred( GOND Safe-Inferredk GONE Safe-Inferred&5F Safe-Inferred&5G Safe-InferredH Safe-Inferred Safe-Inferred9 vwxyI Safe-Inferredr vwxy Safe-Inferred base-compatGeneralization of  Data.List.JK.Since: 4.19.0.0+k+kL Safe-Inferred7+kM Safe-InferredjN Safe-Inferred Safe-InferredO Safe-InferredP Safe-Inferred&Q Safe-InferredzR Safe-InferredS Safe-InferredT Safe-Inferred&U Safe-InferredRV Safe-Inferred|W Safe-Inferred Safe-Inferred X Safe-Inferred  Safe-InferredR#8#8Y Safe-Inferred#8 Safe-InferreddZ Safe-Inferred[ Safe-InferredC\ Safe-InferredC+ Trustworthy*] Safe-Inferred` Safe-Inferred/7lmd/7lmd^ Safe-Inferredl/7lmd Safe-Inferred::_ Safe-Inferred):& Trustworthy[ 6` Safe-Inferred 6Safe ISU ISUUa Safe-Inferred U TrustworthyV b Safe-Inferred c TrustworthyDd Safe-Inferred D  Safe-Inferred X}}e Safe-Inferred }f Safe-Inferred g Safe-Inferred   Safe-Inferred! Fh Safe-Inferred!` F* Safe-Inferred!i Safe-Inferred! Trustworthy"?Tj Safe-Inferred"T  Trustworthy"TTk Safe-Inferred#6T Safe-Inferred#{l Safe-Inferred#  Safe-Inferred# m Safe-Inferred$ " Safe-Inferred$Mn Safe-Inferred$o Safe-Inferred$p Safe-Inferred%( Safe-Inferred&Lq Safe-Inferred&x! Safe-Inferred& r Trustworthy&s Safe-Inferred't Trustworthy(.>TFu Safe-Inferred)>TFv Safe-Inferred+V  Safe-Inferred+.'w Safe-Inferred, .'  Trustworthy,``x Safe-Inferred,` Trustworthy,zxn|wyv{]_^abc564#j!"i+k*387$%  '0,~ .( )/12&\-WXYVZ[E;<=>?F9MJGNOALKBQRPC:Dzxn|wyv{]_^abc#j!"ik  ~  \WXYVZ[4$%&'5(+)*38,-./01726E;<=>?F9MJGNOALKBQRPC:D Trustworthy: base-compat:List index (subscript) operator, starting from 0. Returns K if the index is out of bounds['a', 'b', 'c'] !? 0Just 'a'['a', 'b', 'c'] !? 2Just 'c'['a', 'b', 'c'] !? 3Nothing['a', 'b', 'c'] !? (-1)Nothing)This is the total variant of the partial  operator.6WARNING: This function takes linear time in the index. base-compat\mathcal{O}(n). Decompose a list into  and .If the list is empty, returns K."If the list is non-empty, returns L (xs, x) , where xs is the ial part of the list and x is its  element.Since: 4.19.0.0 unsnoc []Nothing unsnoc [1] Just ([],1)unsnoc [1, 2, 3]Just ([1,2],3) Laziness:fst <$> unsnoc [undefined]Just []%head . fst <$> unsnoc (1 : undefined)%Just *** Exception: Prelude.undefined)head . fst <$> unsnoc (1 : 2 : undefined)Just 1 is dual to : for a finite list xs unsnoc xs = (\(hd, tl) -> (reverse tl, hd)) <$> uncons (reverse xs) base-compatUse  xs n' as a safer and faster alternative to V ( xs) n#. Similarly, it's better to write compareLength xs 10 == LT instead of length xs < 10.While / would force and traverse the entire spine of xs (which could even diverge if xs is infinite),  traverses at most n" elements to determine its result.compareLength [] 0EQcompareLength [] 1LTcompareLength ['a'] 1EQcompareLength ['a', 'b'] 1GTcompareLength [0..] 100GTcompareLength undefined (-1)GT!compareLength ('a' : undefined) 0GT base-compatThe  function returns all non-empty initial segments of the argument, shortest first.Laziness Note that ) has the following strictness property: %inits1 (xs ++ _|_) = inits1 xs ++ _|_In particular, inits1 _|_ = _|_Examples inits1 "abc""['a' :| "",'a' :| "b",'a' :| "bc"] inits1 [][]'inits1 is productive on infinite lists:take 3 $ inits1 [1..][1 :| [],1 :| [2],1 :| [2,3]] base-compat\mathcal{O}(n). The  function returns all non-empty final segments of the argument, longest first.Laziness Note that ) has the following strictness property: tails1 _|_ = _|_tails1 undefined *** Exception: Prelude.undefined!drop 1 (tails1 [undefined, 1, 2])[1 :| [2],2 :| []]Examples tails1 "abc""['a' :| "bc",'b' :| "c",'c' :| ""]tails1 [1, 2, 3][1 :| [2,3],2 :| [3],3 :| []] tails1 [][]@@9  Safe-InferredC base-compatThe ? function returns the list of all permutations of the argument.Since: 4.20.0.0 base-compat operates like , but uses the knowledge that its input is non-empty to produce output where every element is non-empty. 5permutations1 = fmap fromList . permutations . toListSince: 4.20.0.0 base-compatSort a H5 on a user-supplied projection of its elements. See  for more detailed information.Examples5sortOn fst $ (2, "world") :| [(4, "!"), (1, "Hello")]$(1,"Hello") :| [(2,"world"),(4,"!")]sortOn length $ "jim" :| ["creed", "pam", "michael", "dwight", "kevin"]3"jim" :| ["pam","creed","kevin","dwight","michael"]Performance notesThis function minimises the projections performed, by materialising the projections in an intermediate list.1For trivial projections, you should prefer using  with  comparing, for example:3sortBy (comparing fst) $ (3, 1) :| [(2, 2), (1, 3)](1,3) :| [(2,2),(3,1)]Or, for the exact same API as #, you can use `sortBy . comparing`:5(sortBy . comparing) fst $ (3, 1) :| [(2, 2), (1, 3)](1,3) :| [(2,2),(3,1)]& is an alias for `sortBy . comparing`.Since: 4.20.0.0 base-compat"Lift list operations to work on a H stream.Beware: If the provided function returns an empty list, this will raise an error. base-compatUse  xs n' as a safer and faster alternative to V ( xs) n#. Similarly, it's better to write compareLength xs 10 == LT instead of length xs < 10.While / would force and traverse the entire spine of xs (which could even diverge if xs is infinite),  traverses at most n" elements to determine its result.compareLength ('a' :| []) 1EQcompareLength ('a' :| ['b']) 3LTcompareLength (0 :| [1..]) 100GTcompareLength undefined 0GT(compareLength ('a' :| 'b' : undefined) 1GTHeHey Safe-InferredDHez Safe-InferredE@. Safe-InferredH~ base-compat'Traverses only over the first argument.  f D  f " base-compat(Traverses only over the second argument.  f D  " fExamples Basic usage:secondA (find odd) (Left [])Just (Left [])#secondA (find odd) (Left [1, 2, 3])Just (Left [1,2,3])!secondA (find odd) (Right [4, 5])Just (Right 5)&secondA (find odd) ([1, 2, 3], [4, 5])Just ([1,2,3],5)!secondA (find odd) ([1,2,3], [4])Nothing { Safe-InferredH | Safe-InferredI>=;E9JM=negate>>=>>fmapreturnControl.Monad.Failfail fromIntegral realToFrac toInteger toRational Control.Monadguard<>memptymappendmconcatjoin<*>pure*>BoundedEnumEq GHC.FloatFloating FractionalIntegralMonadFunctorNumOrdGHC.ReadReadReal RealFloatRealFracGHC.ShowShow MonadFail Applicative Data.FoldableFoldableData.Traversable Traversable SemigroupMonoid GHC.TypesBoolStringCharDoubleFloatInt ghc-bignumGHC.Num.IntegerIntegerList GHC.MaybeMaybeOrderingRational~IOWord Data.EitherEitherNonEmptyGHC.Tuple.PrimSoloFalseNothingJustTrueLeftRightLTEQGTMkSoloGHC.ForeignPtr ForeignPtr GHC.Tuplecompare<<=>maxmin/=&&||not GHC.NaturalminusNaturalMaybeGHC.ErrerrorerrorWithoutStackTrace undefinedData.Semigroup.InternalstimesIdempotentMonoid:| MonadPlusmzeromplusliftA2<*<$sconcatstimes=<<whenliftMliftM2liftM3liftM4liftM5apidconst.flip$!untilasTypeOf Data.Version makeVersion+*abssignumsubtract Data.Maybemaybeheadtaillastinitscanlscanl1scanrscanr1iteraterepeat replicatecycle takeWhile dropWhiletakedropsplitAtspanbreakreverselookup!!zip3zipWithzipWith3unzip3 showsPrecshowshowListShowSshowsshowChar showString showParensuccpredtoEnumfromEnumminBoundmaxBoundproperFractiontruncateroundceilingfloor/recipquotremdivmodquotRemdivModevenodd^^^gcdlcmGHC.Bits bitDefaulttestBitDefaultpopCountDefaulttoIntegralSizedGHC.Word byteSwap16 byteSwap32 byteSwap64GHC.STunsafeInterleaveST floatRadix floatDigits floatRange decodeFloat encodeFloatexponent significand scaleFloatisNaN isInfiniteisDenormalizedisNegativeZeroisIEEEatan2piexplogsqrt**logBasesincostanasinacosatansinhcoshtanhasinhacoshatanh Data.Boolbool GHC.IO.UnsafeunsafeDupablePerformIO Data.Tuplefstsndcurryuncurryswap Data.Functor<$><&>$>void Data.Function& applyWhenText.ParserCombinators.ReadPReadS Text.Read.LexLexemePuncIdentSymbolNumberEOFreadBinP readsPrecreadListreadPrec readListPrec readParenreadListDefaultreadListPrecDefaultlexlexPparensNumericreadBin showFFloatAlt showGFloatAlt showHFloatshowBineitherisLeftisRightfromLeft fromRight Text.Readreads readEither readMayberead Data.BitsoneBits.^..>>..<<.!>>.!<<.Data.Type.Coercion gcoerceWith Data.Proxy asProxyTypeOfAltgetAltProduct getProductSumgetSumAnygetAnyAllgetAllEndoappEndoDualgetDualstimesIdempotent stimesMonoid Data.MonoidApgetApLastgetLastFirstgetFirstfoldMapfoldrfoldlfoldl'foldr1foldl1nulllengthelemmaximumminimumsumproductmapM_forM_ sequence_msumconcat concatMapandoranyallnotElemData.Functor.ConstConstgetConstData.Typeable.InternalTypeRep withTypeable Data.TypeableheqT Data.OldListlinesunlineswordsunwords GHC.ExceptionthrowGHC.IO.ExceptionIOError userErrorGHC.IOFilePath unsafeIOToST unsafeSTToIO GHC.IORefatomicModifyIORef'FinalizerEnvPtr FinalizerPtrmallocForeignPtrmallocForeignPtrBytesaddForeignPtrFinalizeraddForeignPtrFinalizerEnvnewForeignPtr_withForeignPtrtouchForeignPtrunsafeForeignPtrToPtrcastForeignPtrplusForeignPtrfinalizeForeignPtrForeign.ForeignPtr.Imp newForeignPtrnewForeignPtrEnvmallocForeignPtrArraymallocForeignPtrArray0 Data.IORef modifyIORef'atomicWriteIORefioErrorForeign.Marshal.Alloccalloc callocBytesForeign.Marshal.Utils fillBytesForeign.Marshal.Array callocArray callocArray0System.IO.Unsafe unsafeFixIOControl.Concurrent.MVarwithMVarMaskedSystem.IO.ErrorisResourceVanishedErrorresourceVanishedErrorTypeisResourceVanishedErrorTypeGHC.IO.Handle.Text hGetContents'putCharputStrputStrLngetChargetLine getContents getContents'interactreadFile readFile' writeFile appendFilereadLnreadIOtraverse sequenceAmapMsequenceforM mapAccumM forAccumMfilterM>=><=<forever mapAndUnzipMzipWithM zipWithM_foldMfoldM_ replicateM replicateM_unless<$!>mfilter System.ExitdieForeign.Marshal.UnsafeunsafeLocalStateSystem.EnvironmentgetArgs getProgNamegetEnv lookupEnvsetEnvunsetEnvwithArgs withProgNamegetEnvironment Debug.Trace traceShowMtraceM traceShowIdtraceId traceWith traceShowWithtraceEventWith Data.STRef modifySTRef'Control.Monad.ST.Lazy.ImpData.List.NonEmptyxorunfoldnonEmptyunconsunfoldr singleton<|conssortfromListtoListinitsinits1tailstails1insertsome1 intersperse partitiongroupgroupBy groupWith groupAllWithgroup1groupBy1 groupWith1 groupAllWith1 isPrefixOfnubnubBy transposesortBysortWithappend appendList prependListControl.Concurrent forkFinallyforkOSWithUnmaskData.Semigroup WrappedMonoid WrapMonoid unwrapMonoidArgMaxArgMinArgMaxgetMaxMingetMincycle1diff mtimesDefaultgetSolo!?unsnoc compareLength permutations permutations1sortOnfirstAsecondA decTypeRepdecThdecTGHC.MVarMVarControl.Concurrent.ChanChan GHC.Conc.SyncThreadIdControl.Concurrent.QSemNQSemNControl.Concurrent.QSemQSemthrowToforkIOWithUnmaskforkIO killThread GHC.Conc.IO threadDelayforkOS newEmptyMVarnewMVartakeMVarreadMVarputMVar tryTakeMVar tryPutMVar tryReadMVar isEmptyMVaraddMVarFinalizer myThreadIdforkOnforkOnWithUnmaskgetNumCapabilitiessetNumCapabilitiesyieldthreadCapabilitymkWeakThreadIdwithMVar modifyMVar_swapMVar modifyMVarmodifyMVarMasked_modifyMVarMasked mkWeakMVarthreadWaitReadthreadWaitWritethreadWaitReadSTMthreadWaitWriteSTMnewQSemN waitQSemN signalQSemNnewQSemwaitQSem signalQSemnewChan writeChanreadChandupChangetChanContentswriteList2ChanrtsSupportsBoundThreadsisCurrentThreadBoundrunInBoundThreadrunInUnboundThreadAssertionFailedGHC.Exception.Type Exception toException fromExceptiondisplayException IOExceptionBlockedIndefinitelyOnMVarControl.Exception.Base TypeError SomeExceptionArithException UnderflowOverflowLossOfPrecision DivideByZeroDenormalRatioZeroDenominator ErrorCallErrorCallWithLocation MaskingStateUnmaskedMaskedInterruptibleMaskedUninterruptibleArrayExceptionIndexOutOfBoundsUndefinedElementAsyncException StackOverflow HeapOverflow ThreadKilled UserInterruptSomeAsyncExceptionCompactionFailedAllocationLimitExceededDeadlockBlockedIndefinitelyOnSTMNestedAtomicallyNonTermination NoMethodError RecUpdError RecConError RecSelErrorPatternMatchFailControl.ExceptionHandlerbracketmaskthrowIOtrycatchassert interruptiblegetMaskingState onExceptionmask_uninterruptibleMask_uninterruptibleMaskfinallyevaluateasyncExceptionToExceptionasyncExceptionFromException catchJusthandle handleJust mapExceptiontryJustbracket_bracketOnErrorcatchesallowInterruptControl.Monad.IO.ClassMonadIOliftIOData.Bifoldable Bifoldablebifold bifoldMapbifoldrbifoldlbifoldr'bifoldr1bifoldrMbifoldl'bifoldl1bifoldlM bitraverse_bifor_bimapM_biforM_ bisequenceA_ bisequence_biasumbimsumbiListbinullbilengthbielembiconcat bimaximum biminimumbisum biproduct biconcatMapbiandbiorbianybiall bimaximumBy biminimumBy binotElembifindData.Bifoldable1 Bifoldable1bifold1 bifoldMap1Data.Bifunctor Bifunctorbimapfirstsecond FiniteBits finiteBitSizecountLeadingZeroscountTrailingZerosBits.&..|. complementshiftrotatezeroBitsbitsetBitclearBit complementBittestBit bitSizeMaybebitSizeisSignedshiftL unsafeShiftLshiftR unsafeShiftRrotateLrotateRpopCountIffgetIffXorgetXorIorgetIorAndgetAnd Data.ComplexComplex:+realPartimagPart conjugatemkPolarcispolar magnitudephaseleftsrightspartitionEithersfoldr'foldfoldMap' maximumBy minimumByfoldrMfoldlM traverse_for_ sequenceA_asumfindData.Foldable1 Foldable1fold1foldMap1 foldMap1' toNonEmpty foldrMap1 foldlMap1' foldlMap1 foldrMap1'foldl1'foldr1' intercalate1foldrM1 foldrMapM1foldlM1 foldlMapM1fixonData.Functor.ComposeCompose getComposeData.Functor.ContravariantOpgetOp EquivalencegetEquivalence Comparison getComparison Predicate getPredicate Contravariant contramap>$phantom$<>$<>$$<defaultComparisondefaultEquivalencecomparisonEquivalenceData.Functor.IdentityIdentity runIdentityData.Functor.ProductPairData.Functor.SumInLInRIORefatomicModifyIORefnewIORef readIORef writeIORef mkWeakIORef modifyIORefKProxyProxyRatio% numerator denominator Data.RatioapproxRational GHC.STRefSTRefnewSTRef readSTRef writeSTRef modifySTRef Data.StringIsString fromStringfor mapAccumL mapAccumR fmapDefaultfoldMapDefault TestCoercion testCoercionCoercionsymtrans coerceWithrepr~~Data.Type.Equality TestEquality testEquality:~~:HRefl:~:ReflcastWith gcastWithapplyinnerouterVersion versionBranch versionTags showVersion parseVersionVoidabsurdvacuousWord8Word64Word32Word16 bitReverse8 bitReverse16 bitReverse32 bitReverse64tracetraceIO traceMarkerIO traceMarker traceEventIO traceEvent traceStack traceShow putTraceMsg flushEventLogmallocfree finalizerFreealloca mallocBytes allocaBytesallocaBytesAlignedrealloc reallocBytesnewArray mallocArray mallocArray0 allocaArray allocaArray0 reallocArray reallocArray0 peekArray peekArray0 pokeArray pokeArray0 newArray0 withArray withArrayLen withArray0 withArrayLen0 copyArray moveArray lengthArray0 advancePtrForeign.Marshal.ErrorthrowIfthrowIf_ throwIfNeg throwIfNeg_ throwIfNullForeign.Marshal.PoolPoolnewPoolfreePoolwithPool pooledMallocpooledMallocBytes pooledReallocpooledReallocBytespooledMallocArraypooledMallocArray0pooledReallocArraypooledReallocArray0 pooledNewpooledNewArraypooledNewArray0newwithfromBooltoBoolmaybeNew maybeWith maybePeekwithMany copyBytes moveBytesForeign.StorableStorablesizeOf alignment peekElemOff pokeElemOff peekByteOff pokeByteOffpeekpokeGHC.IntInt8Int16Int32Int64 GHC.Stable StablePtrGHC.PtrPtrFunPtr Foreign.PtrIntPtrWordPtrfreeHaskellFunPtrnullPtr newStablePtrcastPtrplusPtralignPtrminusPtr nullFunPtr castFunPtrcastFunPtrToPtrcastPtrToFunPtr freeStablePtrdeRefStablePtrcastStablePtrToPtrcastPtrToStablePtr ptrToWordPtr wordPtrToPtr ptrToIntPtr intPtrToPtrlog1pexpm1log1pexplog1mexp showSigned showFloat floatToDigitsfromRat lexDigitsreadIntreadOctreadDecreadHex readFloat readSignedshowInt showEFloat showFFloat showGFloat showIntAtBaseshowHexshowOctGHC.Num.NaturalNatural genericLengthgenericReplicate genericTake genericDropgenericSplitAt genericIndexscanl'iterate' dropWhileEnd stripPrefix elemIndex elemIndices findIndex findIndices isSuffixOf isInfixOfdeletedeleteBy\\unionunionBy intersect intersectBy intercalateinsertByzip4zip5zip6zip7zipWith4zipWith5zipWith6zipWith7unzip4unzip5unzip6unzip7deleteFirstsBy subsequencesisSubsequenceOfliftData.Bitraversable bitraverse Bitraversablebifor bisequence bisequenceAbimapMbiforM bimapAccumL bimapAccumR bimapDefaultbifoldMapDefaultExitCode ExitSuccess ExitFailureexitWith exitFailure exitSuccessGHC.IO.Handle.TypesHandleGHC.IO.Encoding.Types TextEncoding GHC.IO.IOModeIOModeReadMode WriteMode AppendMode ReadWriteMode GHC.IO.DeviceSeekMode AbsoluteSeek RelativeSeek SeekFromEnd NewlineModeinputNLoutputNLNewlineLFCRLF BufferMode NoBuffering LineBufferingBlockBuffering GHC.IO.Handle HandlePosn hGetContentsGHC.IO.StdHandlesopenFilestdoutstdinstderrGHC.IO.Encodingutf8mkTextEncodinghSeekhFlush hLookAheadfixIOhClosehSetBinaryModelocaleEncodinghGetBufhPutBuf hWaitForInput nativeNewlineuniversalNewlineModenativeNewlineModenoNewlineTranslationutf8_bomutf32utf32beutf32leutf16utf16beutf16lelatin1char8hGetCharhGetLinehPutCharhPutStr hPutStrLnhPutBufNonBlocking hGetBufSomehGetBufNonBlockingwithFileopenBinaryFilewithBinaryFile hFileSize hSetFileSizehIsEOFisEOF hSetBuffering hSetEncoding hGetEncodinghGetPosnhSetPosnhTellhIsOpen hIsClosed hIsReadable hIsWritable hGetBuffering hIsSeekablehSetEchohGetEchohIsTerminalDevicehSetNewlineModehShowhReadyhPrint openTempFileopenBinaryTempFile"openTempFileWithDefaultPermissions(openBinaryTempFileWithDefaultPermissions IOErrorTypeisDoesNotExistErrorisAlreadyInUseErrorisPermissionError isFullError isEOFErrorisIllegalOperation tryIOError mkIOErrorisAlreadyExistsError isUserErroralreadyExistsErrorTypedoesNotExistErrorTypealreadyInUseErrorType fullErrorType eofErrorTypeillegalOperationErrorTypepermissionErrorType userErrorTypeisAlreadyExistsErrorTypeisDoesNotExistErrorTypeisAlreadyInUseErrorTypeisFullErrorTypeisEOFErrorTypeisIllegalOperationErrorTypeisPermissionErrorTypeisUserErrorTypeioeGetErrorTypeioeGetErrorStringioeGetLocation ioeGetHandleioeGetFileNameioeSetErrorTypeioeSetErrorStringioeSetLocation ioeSetHandleioeSetFileName modifyIOErrorannotateIOError catchIOErrorunsafePerformIOunsafeInterleaveIOText.ParserCombinators.ReadPrecPrecReadPrecgetlookpfail+++<++choiceminPrecstepresetprec readPrec_to_P readP_to_Prec readPrec_to_S readS_to_PrecnumberToInteger numberToFixednumberToRangedRationalnumberToRationalexpecthsLex isSymbolCharlexCharreadIntPreadOctPreadDecPreadHexPTyConModuleTypeable SomeTypeRepCon'ConAppFun moduleName modulePackage tyConPackage tyConModule tyConName rnfModulernfTyConsomeTypeRepTyCon typeRepTyCon eqTypeRep typeRepKindtypeReptypeOf someTypeRep splitApps rnfTypeReprnfSomeTypeReptyConFingerprinttypeRepFingerprint trLiftedRep showsTypeRepcasteqTgcastgcast1gcast2 funResultTymkFunTy splitTyConApp typeRepArgstypeOf1typeOf2typeOf3typeOf4typeOf5typeOf6typeOf7