`>S      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None&'+,-;<=>?AFQSTVODConverts a function that works on n-ary tuples to a curried function/curryT (\(a,b,c) -> a + b + c) 1 2 3 :: Integer6?Currently, type inference is partially broken for this functionDConverts a curried function to a function that works on n-ary tuples&uncurryT (\a b c -> a + b + c) (1,2,3)60Reverses the order of elements in an n-ary tuplereverseT (1,2,3,4) (4,3,2,1)-Appends two n-ary tuple into one larger tupleappendT (5,'c') ('d',False)(5,'c','d',False)-Compresses sub-tuples into their paren-tuplesflattenT (5,6,(1,2,(3,4)))Fold right for n-ary tuplesfoldrT (-) 0 (4,3,2,1)2Fold left for n-ary tuplesfoldlT (-) 0 (4,3,2,1)-10:Deletes an element specified by an index in an n-ary tuple%delN ('c',False,5) (Proxy :: Proxy 1)('c',5)XDeletes the first element in an n-ary tuple whose type does not exist in the target type del ('c',False,5) :: (Char,Bool) ('c',False)EInserts an element at an index specified position into an n-ary tuple'insN 5 ('c',1,False) (Proxy :: Proxy 1)('c',5,1,False) UInserts an element into an n-ary tuple. Its position is determined by the target type+ins 5 ('c', False) :: (Char, Integer, Bool) ('c',5,False);An element will only be inserted at a specific position if:+The element type matches the component type(The tail of the tuple remains well-typed5ins 5 ('c',1,False) :: (Char, Integer, Bool, Integer)('c',1,False,5)(In the above example, inserting 5 after ch would make the tail of the tuple have type (Integer, Bool) when the target type asks for (Bool,Integer)yWhen attempting to insert an element before or after a component of the same type the element is always inserted in front5ins 5 ('c',1,False) :: (Char, Integer, Integer, Bool)('c',5,1,False) -Adds an element to the back of an n-ary tuplesnocT 5 (True,'c') (True,'c',5) -Adds an element to the head of an n-ary tupleconsT 5 (True,'c') (5,True,'c') uMaps a monomorphic function over each element in an n-ary tuple that matches the type of the argument of the functionmapT not (True,'c',False)(False,'c',True)5Sometimes it is necessary to specify the result type.9mapT (+1) (5,6,7,False) :: (Integer,Integer,Integer,Bool) (6,7,8,False)Using *( this is not necessary. However, to use *7 the tuple may only contains elements of a single type. Apply an n-ary function to an n-ary tuple. The function takes an argument for each component of the tuple in left-to-right order./appF (\a b c -> if a then b else c) (False,1,2)2+Applies a function to the element at index n in an n-ary tuple.%appN not (Proxy 2) (False,True,False)(False,True,True)% also works for polymorphic functions*appN show (5,'c',False) (Proxy :: Proxy 2)(5,'c',"False")|Applies a monomorphic function to the first element of an n-ary tuple that matches the type of the argument of the function.app not ('d',True) ('d',False)Sometimes it is necessary to specify the result type, such that the function becomes monomorphic >>> app (+1) (True,5) :: (Bool,Integer) (True,6)One may also use , which doesn't require specifying the result type. However it can only apply functions to the first element of an n-ary tuple.HTakes an n-ary tuple and returns the same tuple minus the first element.initT (1,2,3,4)(1,2,3))Works only only tuples of size at least 3 initT (1,2).Couldn't match type `2 ':<= 3' with `2 ':>= 3'HTakes an n-ary tuple and returns the same tuple minus the first element.tailT (1,2,3,4)(2,3,4))Works only only tuples of size at least 3 tailT (1,2).Couldn't match type `2 ':<= 3' with `2 ':>= 3'Takes an n-ary tuple and a  carrying a 6, returns the element with the index specified by the Nat)selN (1,'d',False,'c') (Proxy :: Proxy 2)FalseHTakes an n-ary tuple and returns the first element of the requested typesel (1,'d','c') :: Char'd'+Selects the first element in an n-ary tuplesel1 (0,'d','c')0+Selects the last element of any n-ary tuplelastT (1,2,3,4)4 lastT (1,2,3)3Applies a polymorphic function to the first element of an n-ary tuple. Since the function is polymorphic in its argument it can always be applied to the first element of a tuple.appPoly show (5,False) ("5",False) 9Applies a function to the first element of an n-ary tupleapp1 (+1) (5,6,7)(6,6,7)*|Applies a polymorphic function to each element in an n-ary tuple. Requires all elements in the tuple to be of the same type.mapPolyT (+1) (5,6,7,8) (6,7,8,9)mapPolyT (+1) (5,6,7,False)7No instance for (Num Bool) arising from the literal `5'+7Inserts an element in head position into an n-ary tupleins1 5 ('c',1,False)(5,'c',1,False)5+Deletes the first element of an n-ary tupledel1 ('c',False,5) (False,5)?  !"#$%&'()*+,-./0123456789:;<=>? * !"#$%&'()  +,-./0123456789:;<=>1     SafeS      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(tuple-sop-0.3.1.0-IriR2JNt4FO80411FaYPcYData.Tuple.OpsPaths_tuple_sopcurryTuncurryTreverseTappendTfoldrTfoldlTdelNdelinsNinssnocTconsTmapTappFappNappinitTtailTselNselsel1sel2sel3sel4sel5sel6sel7sel8sel9sel10lastTappPolyapp1app2app3app4app5app6app7app8app9app10mapPolyTins1ins2ins3ins4ins5ins6ins7ins8ins9ins10del1del2del3del4del5del6del7del8del9del10 $fGSelectNPt $fGSelectNPt0 $fGTailTNPNP $fGInitTNPNP $fGInitTNPNP0 $fGAppf:NPNP$fGApp(->):NPNP$fGAppF(->)NPc $fGAppFbNPb' $fGMapTf:NPNP$fGMapT(->):NPNP$fGMapTf[]NPNP $fGConsTaNPNP $fGSnocTaNPNP$fGSnocTaNPNP0 $fGDeleteNPNP$fGDeleteNPNP0$fGFoldLeft(->)NPb$fGFoldLeft(->)NPb0$fGFoldRight(->)NPb$fGFoldRight(->)NPb0$fGFlattenT:NPNP$fGFlattenT[]NPNP$fGAppendTNPysNP$fGAppendTNPysys$fGReverseTNPNPzs$fGReverseTNPxsxs$fGUnCurryT(->)NPb'$fGUnCurryTbNPb' $fUnCurryTstb $fReverseTst $fAppendTsrt$fFoldRightfst $fFoldLeftfst $fSnocTast $fConsTast $fAppFfst $fSelectst$fFuncToGen(->)(->)$fFuncToGenbb'$fGReverseNPNPt$fGReverseNPNPNP$fGInsertNNat'aNPS'NP$fGInsertNNat'aNPZ'NP$fGInsertNat'S'aNPNP$fGInsertNat'Z'aNPNP$fGDeleteNNPS'NP$fGDeleteNNPZ'NP$fGAppNfNPS'NP$fGAppN(->)NPZ'NP$fGSelectNNPS't$fGSelectNNPZ't$fInsertNNatasnt $fAppNfsnt $fSelectNsnt$fGFlattenT:NPNP0 $fFlattenTst$fGMapTPoly:NPNP$fGAppPoly:NPNP $fMapTfst$fAppfst$fGCurryT(->)NP[]b'$fGCurryTfNP:(->) $fCurryTst $fInsertast $fDeleteNsnt $fDeletest $fInitTst $fTailTst$fGenericNPsrepflattenTbase Data.ProxyProxyghc-prim GHC.TypesNatRel:<=:>=PolyNat'Z'S'GReversegreverse FuncToGen funcToGen GenericNPRepNPfrom_npto_npGCurryTgcurryTCurryT GUnCurryT guncurryTUnCurryT GReverseT greverseTReverseTGAppendTgappendTAppendT GFlattenT gflattenTFlattenT FoldLeftFfoldlF GFoldRightgfoldrT FoldRight GFoldLeftgfoldlTFoldLeftGDeleteNgdelNDeleteNGDeletegdelDeleteGInsertNginsNInsertNGInsertginsInsertGSnocTgsnocTSnocTGConsTgconsTConsTGMapTgmapTMapTGAppFgappFAppFGAppNgappNAppNGAppgappAppGInitTginitTInitTGTailTgtailTTailTGSelectNgselNSelectNGSelectgselSelectversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName