!W&KO       !" # $ % &' ( ) *+,-./01234 56789:; < = > ?@AB C DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                      ! " # $ %&'()*+,-./0123456789:; < =>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % &'()*+,- . /0123 4 5 6 7 8 9 : ; < = > ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ `abcdefghijklmnopqrstuvwxyz{|}~                          !!!!!!!!!!!!"""""""""""""""""" # # # # $$$$$$$$$$$$$$$$%&& &!&"&#&$&%'&'''(')'*'+(,(-(.(/(0(1(2(3)4)5*6*7*8*9*:*;*<*=*>*?*@*A*B*C*D+E+F+G+H+I,J,K-L-M-N5 \(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe2o-reludeShorter alias for pure ().pass :: Maybe ()Just ().relude]For chaining applicative operations in forward applications using '(&)' Named version of the  operator, which is ' but flippedJust (+ 1) & appliedTo (Just 2)Just 32Just (+) & appliedTo (Just 1) & appliedTo (Just 2)Just 3Nothing & appliedTo (Just 2)Nothing<(')-.<(')-.\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Unsafe5dR *+ ,389?@AEPhijSZ[\]^_klm%&('EGFIHPONMLRE,3PhijEGFSkPONML ^Z[IH9*+ lm?8@\]%&('A_\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe:) Daeq Daeq\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>None< !+,,+ ! (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe>c;=>;=>\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>SafeB/reludeRenamed version of ./. JKrst/ JKrst/U(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018 KowainikMITKowainik <xrom.xkov@gmail.com>SafeEq&1pqrstuvyxw|{z~}uvx&1uvxpqrstuvyxw|{z~}U(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018 KowainikMITKowainik <xrom.xkov@gmail.com>SafeM0relude Alias for  fmap . fmap%. Convenient to work with two nested 1s.negate <<$>> Just [1,2,3]Just [-1,-2,-3]1reludeTakes a function in a 1* context and applies it to a normal value.flap (++) "relude" "P" "Prelude"2reludeOperator version of the 1 function.[(+2), (*3)] ?? 5[7,15]Just (+3) ?? 5Just 8w0120w1204240U(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018 KowainikMITKowainik <xrom.xkov@gmail.com>SafeP*1pqrstuvyxw|{z~}uvwx012 \(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>SafeY 3relude Lifted to  version of O.4relude Lifted to  version of P.5relude Lifted to  version of Q.6relude Lifted to  version of R.7relude Lifted to  version of S.8relude Lifted to  version of T.9relude Lifted to  version of U.:relude Lifted to  version of V.;relude Lifted to  version of W.<relude Lifted to  version of X.=relude Lifted to  version of Y.>relude Lifted to  version of Z.3456789:;<=>3456789:;<=>\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe^[?reludeLifted version of 12.@reludeLifted version of 13.AreludeLifted version of 14.BreludeLifted version of 15.?@AB?@AB\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>SafedhCreludeLifted version of [.DreludeLifted version of \.EreludeLifted version of ].FreludeLifted version of ^.GreludeLifted version of _.HreludeLifted version of `.IreludeLifted version of a.JreludeLifted version of b. CDEFGHIJ HIJFGCDE\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com> Trustworthyg0)*+,-./0123456789:0)*+,-./0123456789:\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>SafejU&0:OcdYfg?@ABCD     &'*)(U     &'*)(&0:OcdYfg?@ABCD\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe}Krelude Similar to  but with flipped arguments.readMaybe "True" ?: FalseTruereadMaybe "Tru" ?: FalseFalseLreludeSpecialized version of for_ for OC. It's used for code readability. Also helps to avoid space leaks:  Ohttp://www.snoyman.com/blog/2017/01/foldable-mapm-maybe-and-recursive-functionsFoldable.mapM_ space leak.&whenJust Nothing $ \b -> print (not b)*whenJust (Just True) $ \b -> print (not b)FalseMreludeMonadic version of L.NreludePerforms default < action if c) is given. Otherwise returns content of d pured to <.!whenNothing Nothing [True, False] [True,False]%whenNothing (Just True) [True, False][True]OreludePerforms default < action if c is given. Do nothing for d. Convenient for discarding d content.+whenNothing_ Nothing $ putTextLn "Nothing!"Nothing!/whenNothing_ (Just True) $ putTextLn "Nothing!"PreludeMonadic version of N.QreludeMonadic version of Q.KLMNOPQKLMNOPQK0\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>NoneRreludeLifted version of c.SreludeLifted version of d.TreludeLifted version of e.RSTRST\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe Urelude$Shorter and more readable alias for flip runReaderT.Vrelude$Shorter and more readable alias for flip runReader.Wrelude$Shorter and more readable alias for flip runStateT.Xrelude$Shorter and more readable alias for  flip runState.Yrelude Alias for flip evalStateTF. It's not shorter but sometimes more readable. Done by analogy with using* functions family.Zrelude Alias for flip evalStateF. It's not shorter but sometimes more readable. Done by analogy with using* functions family.[relude Alias for flip execStateTF. It's not shorter but sometimes more readable. Done by analogy with using* functions family.\relude Alias for flip execStateF. It's not shorter but sometimes more readable. Done by analogy with using* functions family.]reludeLift a O to the * monad^reludeLift a Y to the  monad UVWXYZ[\]^ VUZY\[XW]^ \(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>None7M_relude Extracts C value from O returning # if Nothing.+maybeToMonoid (Just [1,2,3] :: Maybe [Int])[1,2,3]&maybeToMonoid (Nothing :: Maybe [Int])[]0B"C#$%     ! $#"_3C#$%     ! $#"B"   _\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe`reludeLike .6 but runs in  O(n \log n)  time and requires 3.ordNub [3, 3, 3, 2, 2, -1, 1] [3,2,-1,1]areludeLike .6 but runs in  O(n \log_{16} n)  time and requires .hashNub [3, 3, 3, 2, 2, -1, 1] [3,2,-1,1]breludeLike ` runs in  O(n \log n)  but also sorts a list.sortNub [3, 3, 3, 2, 2, -1, 1] [-1,1,2,3]creludeLike a runs in  O(n \log_{16} n) 7 but has better performance; it doesn't save the order."unstableNub [3, 3, 3, 2, 2, -1, 1] [1,2,3,-1]`abca`bc \(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safep4;;< !"#$%; !"#$%4;<\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe=?@ACXdrelude'Type class for lazy-strict conversions.grelude+Type class for converting other strings to .irelude+Type class for converting other strings to f.krelude+Type class for converting other strings to  .mrelude9Type class for conversion to utf8 representation of text.nreludeEncode as utf8 string (usually ).$encodeUtf8 @Text @ByteString "?0B0:"*"\208\191\208\176\209\130\208\176\208\186"oreludeDecode from utf8 string.GdecodeUtf8 @Text @ByteString "\208\191\208\176\209\130\208\176\208\186""\1087\1072\1090\1072\1082"SputTextLn $ decodeUtf8 @Text @ByteString "\208\191\208\176\209\130\208\176\208\186"?0B0:preludeLDecode as utf8 string but returning execption if byte sequence is malformed.CdecodeUtf8 @Text @ByteString "\208\208\176\209\130\208\176\208\186""\65533\1072\1090\1072\1082"IdecodeUtf8Strict @Text @ByteString "\208\208\176\209\130\208\176\208\186"\Left Cannot decode byte '\xd0': Data.Text.Internal.Encoding.decodeUtf8: Invalid UTF-8 streamqreludeType synonym for 78.rreludeType synonym for 9:.sreludePolymorhpic version of g.readEither @Text @Int "123" Right 123readEither @Text @Int "aa"Left "Prelude.read: no parse"treludeGeneralized version of .;.urelude Alias for f function.vrelude Alias for e function.yrelude Converting  to hK might be a slow operation. Consider using lazy bytestring at first place.dfeghijklmonpqrstuvrqmonpghijkldfeuvst<\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safeo%4;;< !"#$%dfeghijklmonpqrstuv\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com> Trustworthy=>?X,reludeLifted version of i.reludeLifted version of j.reludeLifted version of k.reludeLifted version of l.reludeLifted version of m.reludeLifted version of n.reludeLifted version of o.reludeLifted version of p.\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe reludeMaps left part of Y to O.leftToMaybe (Left True) Just TrueleftToMaybe (Right "aba")NothingreludeMaps right part of Y to O.rightToMaybe (Left True)NothingrightToMaybe (Right "aba") Just "aba"reludeMaps O to Y wrapping default value into f.maybeToRight True (Just "aba") Right "aba"maybeToRight True Nothing Left TruereludeMaps O to Y wrapping default value into g.maybeToLeft True (Just "aba") Left "aba"maybeToLeft True Nothing Right TruereludeApplies given action to Y content if f. is given and returns the result. In case of g$ the default value will be returned.reludeApplies given action to Y content if f is given.reludeMonadic version of .reludeMonadic version of .reludeApplies given action to Y content if g. is given and returns the result. In case of f$ the default value will be returned.reludeApplies given action to Y content if g is given.reludeMonadic version of .reludeMonadic version of .=>>=\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>SafeܪreludeUFor chaining monadic operations in forward applications using '(&)' Named version of .0Just [ 1 :: Int ] & chainedTo (viaNonEmpty head)Just 1&Nothing & chainedTo (viaNonEmpty head)Nothingu&0:OcdYfg=>?@ABCD     &'*)(KLMNOPQUVWXYZ[\]^\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Saferelude.For safe work with lists using functinons for .viaNonEmpty head [1]Just 1viaNonEmpty head []NothingreludePerforms given action over ! list if given list is non empty.+whenNotNull [] $ \(b :| _) -> print (not b)5whenNotNull [False,True] $ \(b :| _) -> print (not b)TruereludeMonadic version of .=\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe3)*+,-./0123456789:\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe%@AgjreludeType that represents exceptions used in cases when a particular codepath is not meant to be ever executed, but happens to be executed anyway.reludeaPattern synonym to easy pattern matching on exceptions. So intead of writing something like this: isNonCriticalExc :: SomeException -> Bool isNonCriticalExc e | Just (_ :: NodeAttackedError) <- fromException e = True | Just DialogUnexpected{} <- fromException e = True | otherwise = False  you can use  pattern synonym: isNonCriticalExc :: SomeException -> Bool isNonCriticalExc = case Exc (_ :: NodeAttackedError) -> True -- matching all exceptions of type NodeAttackedError3 Exc DialogUnexpected{} -> True _ -> False +This pattern is bidirectional. You can use Exc e instead of  toException e.qreludeHGenerate a pure value which, when forced, will throw the given exceptionrelude_Generate a pure value which, when forced, will synchronously throw the exception wrapped into  data type.  \(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>NonereludeLifted alias for r with clearer name.reludeLike  evaluateWNHF but discards value.relude Alias for evaluateWHNF . force with clearer name.relude Alias for evaluateWHNF . rnf . Similar to  but discards resulting value.  \(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>SafeLreludeMonadic version of .+whenM (pure False) $ putTextLn "No text :(",whenM (pure True) $ putTextLn "Yes text :)" Yes text :)whenM (Just True) (pure ())Just ()whenM (Just False) (pure ())Just ()whenM Nothing (pure ())NothingreludeMonadic version of .-unlessM (pure False) $ putTextLn "No text :(" No text :(-unlessM (pure True) $ putTextLn "Yes text :)"reludeMonadic version of  if-then-else.@ifM (pure True) (putTextLn "True text") (putTextLn "False text") True textreludeMonadic version of @. Occasionally useful. Here some complex but real-life example: findSomePath :: IO (Maybe FilePath) somePath :: MaybeT IO FilePath somePath = do path <- MaybeT findSomePath guardM $ liftIO $ doesDirectoryExist path return path relude-Monadic version of 'Data.Bool.(&&)' operator.-Just False &&^ error "Shouldn't be evaluated" Just Falserelude-Monadic version of 'Data.Bool.(||)' operator.,Just True ||^ error "Shouldn't be evaluated" Just True>\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>SafeDaeq(c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>NoneXkrelude?Transforms an integer number to a bounded integral. It returns c3 for integers outside the bound of the return type.integerToBounded @Int 42Just 42integerToBounded @Int8 1024NothingreludeyTranforms an integer number to a natural. Only non-negative integers are considered natural, everything else will return c.integerToNatural (-1)NothingintegerToNatural 0Just 0integerToNatural 10Just 10_-a`_^]\[ZYXWVUTSRQ. /2  56kjihgfedcb7F`GbHIJKLMNQRTUVWXnolmnopyz{|}~_opHIJKLTUVWXlmnno-a`_^]\[ZYXWVUTSRQ6kjihgfedcbF`Gb2  M. /57QRyz{|}~N\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>None=>?HV?relude>Typeclass for data types that can be created from one element.one True :: [Bool][True]one 'a' :: Text"a"&one (3, "hello") :: HashMap Int StringfromList [(3,"hello")]Laws: single-size: " x . size (one x) "a 1(where sizeS is a specific function for each container that returns the size of this container)relude(Type of single element of the structure.reludeCreate a list, map, Text, etc from a single element.reludeCreate singleton .one 42 :: IntSet fromList [42]IntSet.size (one x) == 1reludeCreate singleton +.one 42 :: HashSet Int fromList [42]"length (one @(HashSet Int) x) == 1reludeCreate singleton .one 42 :: Set Int fromList [42]length (one @(Set Int) x) == 1reludeCreate singleton  from key-value pair.one (3, "foo") :: IntMap TextfromList [(3,"foo")]$length (one @(IntMap String) x) == 1reludeCreate singleton , from key-value pair."one (3, "foo") :: HashMap Int TextfromList [(3,"foo")])length (one @(HashMap Int String) x) == 1reludeCreate singleton  from key-value pair.one (3, "foo") :: Map Int TextfromList [(3,"foo")]%length (one @(Map Int String) x) == 1reludeCreate singleton lazy h.one 97 :: LByteString"a"LByteString.length (one x) == 1reludeCreate singleton strict .one 97 :: ByteString"a"ByteString.length (one x) == 1reludeCreate singleton lazy f.one 'a' :: LText"a"LText.length (one x) == 1reludeCreate singleton strict  .one 'a' :: Text"a"Text.length (one x) == 1reludeCreate singleton .one 42 :: Seq Int fromList [42]length (one @(Seq Int) x) == 1reludeAllows to create singleton + list. You might prefer function with name  instead of pure or (:|[]).one 42 :: NonEmpty Int42 :| []#length (one @(NonEmpty Int) x) == 1reludeGAllows to create a singleton list. You might prefer function with name  instead of pure or (:[]).one 42 :: [Int][42]length (one @[Int] x) == 1?\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>NoneA !+,\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>None -.HUVXlL relude3Type family that produces compile-time errors when  and  functions are used with  and +.relude Similar to 1 but takes a function with its arguments flipped."flipfoldl' (/) 5 [2,3] :: Rational15 % 2CThis function can be useful for constructing containers from lists.reludeAlternative version of asum.8asumMap (\x -> if x > 2 then Just x else Nothing) [1..4]Just 3reludePolymorphic version of  concatMapA function.+foldMapA @[Int] (Just . replicate 3) [1..3]Just [1,1,1,2,2,2,3,3,3]reludePolymorphic version of  concatMapM function.+foldMapM @[Int] (Just . replicate 3) [1..3]Just [1,1,1,2,2,2,3,3,3]reludeStricter version of s. sum [1..10]55reludeStricter version of t.product [1..10]3628800reludeLike u but doesn't work on  and + for performance reasons.elem 'x' ("abc" :: String)False!elem False (one True :: Set Bool) ...D " Do not use 'elem' and 'notElem' methods from 'Foldable' on Set Suggestions: Instead of< elem :: (Foldable t, Eq a) => a -> t a -> Bool use3 member :: Ord a => a -> Set a -> Bool... Instead of? notElem :: (Foldable t, Eq a) => a -> t a -> Bool use not . member...reludeLike v but doesn't work on  and + for performance reasons.notElem 'x' ("abc" :: String)True$notElem False (one True :: Set Bool) ...D " Do not use 'elem' and 'notElem' methods from 'Foldable' on Set Suggestions: Instead of< elem :: (Foldable t, Eq a) => a -> t a -> Bool use3 member :: Ord a => a -> Set a -> Bool... Instead of? notElem :: (Foldable t, Eq a) => a -> t a -> Bool use not . member...reludeMonadic version of .andM [Just True, Just False] Just FalseandM [Just True] Just True%andM [Just True, Just False, Nothing] Just FalseandM [Just True, Nothing]NothingZandM [putTextLn "1" >> pure True, putTextLn "2" >> pure False, putTextLn "3" >> pure True]12FalsereludeMonadic version of .orM [Just True, Just False] Just TrueorM [Just True, Nothing] Just TrueorM [Nothing, Just True]NothingreludeMonadic version of .,allM (readMaybe >=> pure . even) ["6", "10"] Just True-allM (readMaybe >=> pure . even) ["5", "aba"] Just False.allM (readMaybe >=> pure . even) ["aba", "10"]NothingreludeMonadic version of .,anyM (readMaybe >=> pure . even) ["5", "10"] Just True.anyM (readMaybe >=> pure . even) ["10", "aba"] Just True.anyM (readMaybe >=> pure . even) ["aba", "10"]Nothing@(c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>NonemI=> (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>NoneHV|reludeModifiable Map.reludeWRead-only map or set. Contains polymorphic functions which work for both sets and maps.reludeOperator version of  function.relude Inverse of  function.reludexReturn the value to which the specified key is mapped, or the default value if this map contains no mapping for the key.relude:Converts the structure to the list of the key-value pairs.7toPairs (HashMap.fromList [('a', "xxx"), ('b', "yyy")])[('a',"xxx"),('b',"yyy")]relude/Converts the structure to the list of the keys.4keys (HashMap.fromList [('a', "xxx"), ('b', "yyy")])"ab"relude1Converts the structure to the list of the values.5elems (HashMap.fromList [('a', "xxx"), ('b', "yyy")]) ["xxx","yyy"]reludeDefault value to return.relude Key to searchreludeContainer to search9 !(c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>None reludeLifted version of w.reludeLifted version of x.reludeLifted version of y.reludeLifted version of z.reludeLifted version of {.reludeLifted version of |.reludeLifted version of }.reludeLifted version of ~.reludeLifted version of .reludeLifted version of .reludeLifted version of .reludeLifted version of .  "\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com> Trustworthy -.27HSX relude Similar to  but data type.relude Version of AB that leaves warning.relude Version of AC that leaves warning.relude Version of AD that leaves warning.relude Version of AE that leaves warning.relude Version of AF that leaves warning.relude Version of AG that leaves warning.relude that takes   as an argument.relude, that leaves warning in code on every usage.  #(c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>NoneXe reludeLifted version of HI. reludeLifted version of .J. reludeLifted version of . reludeLifted version of .        K\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>None'3456789:;<=>?@ABCDEFGHIJRST    L\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com> Trustworthy  !&*+ ,-a`_^]\[ZYXWVUTSRQ. /012  3456kjihgfedcb789:;<(')=>?@AB"C#$%DaeEF`GbHIJKLMNOcdPhijQRSTUVWXYfgZ[\]^_klmnopqrstuvyxw|{z~}     ! $#"%&(')*+,-./0123456789:;<=>?@ABCDEGFIHJKPONMLlmnopqrstuvwxyz{|}~      !"#$%&'*)(+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdfeghijklmonpqrstuv    $E(c) 2014 Chris Allen, Edward Kmett (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe/_K relude  is Y with a Left that is a Crelude Transform a   into an Y.relude Transform an Y into a  .reludeExamples7let fa = Success (*3) :: Validation [Text] (Int -> Int)7let ga = Success (*4) :: Validation [Text] (Int -> Int)*let a = Success 1 :: Validation [Text] Int*let b = Success 7 :: Validation [Text] Int8let c = Failure ["Not correct"] :: Validation [Text] Int?let d = Failure ["Not correct either"] :: Validation [Text] Intfa <*> b Success 21fa <*> cFailure ["Not correct"] c *> d *> b,Failure ["Not correct","Not correct either"]liftA2 (+) a b Success 8liftA2 (+) a cFailure ["Not correct"]  %(c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>SafeXkrelude'Gets a string representation of a type.NOTE: This must be used with TypeApplications language extension. typeName @()"()" typeName @Int"Int"typeName @String"[Char]"typeName @(Maybe Int) "Maybe Int"&(c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>SafePwrelude1Creates a tuple by pairing something with itself. dupe "foo" ("foo","foo")dupe ()((),())reludeNApply a function, with the result in the fst slot, and the value in the other. A dual to  mapToFst (+1) 10(11,10) reludeQApply a function, with the result in the second slot, and the value in the other. A dual to .mapToSnd (+1) 10(10,11)!relude.Maps a function over both elements of a tuple.&mapBoth ("Hello " <>) ("Alice", "Bob")("Hello Alice","Hello Bob")"reludeApply a function that returns a value inside of a functor, with the output in the first slot, the input in the second, and the entire tuple inside the functor. A dual to #traverseToFst (Just . (+1)) 10 Just (11,10) traverseToFst (const Nothing) 10Nothing#reludeApply a function that returns a value inside of a functor, with the output in the second slot, the input in the first, and the entire tuple inside the functor. A dual to ".traverseToSnd (Just . (+1)) 10 Just (10,11) traverseToSnd (const Nothing) 10Nothing$reludeMaps a function that returns a value inside of an applicative functor over both elements of a tuple, with the entire tuple inside the applicative functor.4traverseBoth (Just . ("Hello " <>)) ("Alice", "Bob") Just ("Hello Alice","Hello Bob")-traverseBoth (const Nothing) ("Alice", "Bob")Nothing !"#$ !"#$'(c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>SafeX%reludeUnwraps value from newtype.%newtype Size = Size Int deriving Showun @Int (Size 5)5%un (Size 5) == length ['a', 'x', 'b']False&reludeWraps value to newtype. Behaves exactly as %I but has more meaningnful name in case you need to convert some value to newtype.,newtype Flag = Flag Bool deriving (Show, Eq)wrap False == Flag TrueFalse'relude#Applies function to the content of newtype.. This function is not supposed to be used on newtype7s that are created with the help of smart constructors.$newtype Foo = Foo Bool deriving Showunder not (Foo True) Foo False&newtype Bar = Bar String deriving Show'under (filter (== 'a')) (Bar "abacaba") Bar "aaaa"(reludeLift binary function for newtypes to work over underlying newtype representation.#under2 @(Sum Int) (<>) (3 :: Int) 47under2 @All (<>) True FalseFalse)relude Version of ( that works on newtypeAs parametrized by their representation. Provided for convenience.underF2 @Sum (<>) (3 :: Int) 47underF2 @Max (<>) 'p' 't''t'*reludeCoercible composition%&'()*%&'()*(8(c) 2013-2016 Edward Kmett (c) 2019 KowainikMITKowainik <xrom.xkov@gmail.com>SafeSX+reludegThe monomorphic lenses which don't change the type of the container (or of the value inside). It has a 1 constraint, and since both  and F are functors, it can be used whenever a getter or a setter is needed.a- is the type of the value inside of structures# is the type of the whole structure,reludeCreates + from the getter and setter.-relude/Gets a value out of a structure using a getter..relude5Sets the given value to the structure using a setter./relude)Applies the given function to the target.0reludeThe operator form of - with the arguments flipped.1reludeThe operator form of ..2reludeThe operator form of /.+,-./012+,-./012041424)(c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>NoneHVXp3relude<Groups elements using results of the given function as keys.2groupBy even [1..6] :: HashMap Bool (NonEmpty Int)/fromList [(False,5 :| [3,1]),(True,6 :| [4,2])]4relude Similar to 3% but keeps only one element as value.,groupOneBy even [1 .. 6] :: HashMap Bool IntfromList [(False,1),(True,2)]3434*=(c) 2011-2015 Edward Kmett (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe/k- 5relude;The class of foldable data structures that cannot be empty.6reludeTMap each element of the non-empty structure to a semigroup, and combine the results. foldMap1 SG.Sum (1 :| [2, 3, 4])Sum {getSum = 10}7relude@Combine the elements of a non-empty structure using a semigroup.$fold1 (1 :| [2, 3, 4 :: SG.Sum Int])Sum {getSum = 10}&fold1 (4 :| [5, 10 :: SG.Product Int])Product {getProduct = 200}8relude5Convert a non-empty data structre to a NonEmpty list.toNonEmpty (Identity 2)2 :| []9relude0The first element of a non-empty data structure.head1 (1 :| [2, 3, 4])1:relude/The last element of a non-empty data structure.last1 (1 :| [2, 3, 4])4;relude2The largest element of a non-empty data structure.!maximum1 (32 :| [64, 8, 128, 16])128<relude4The smallest elemenet of a non-empty data structure.!minimum1 (32 :| [64, 8, 128, 16])8=relude7Strictly folds non-empty structure with given function f: 0foldl1' f [x0, x1, x2 ...] = f (f x0 x1) x2 ... &foldl1' (++) ([1,2] :| [[3,4], [5,6]]) [1,2,3,4,5,6] 5;<:7689= 5;<:7689=+(c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>SafeXk%DreludeReturns all values of some * + in ascending order.Edata TrafficLight = Red | Blue | Green deriving (Show, Enum, Bounded)universe :: [TrafficLight][Red,Blue,Green]universe :: [Bool] [False,True]Erelude inverseMap f< creates a function that is the inverse of a given function f. It does so by constructing  for every value f a). The implementation makes sure that the 9 is constructed only once and then shared for every call.-The complexity of reversed mapping though is \mathcal{O}(\log n).Usually you want to use E to inverse t function.>data Color = Red | Green | Blue deriving (Show, Enum, Bounded)0parse = inverseMap show :: String -> Maybe Color parse "Red"Just Red parse "Black"NothingFreludeLike , but doesn't fail on . Instead it returns . next FalseTrue next TrueFalse succ True3*** Exception: Prelude.Enum.Bool.succ: bad argumentGreludeLike , but doesn't fail on . Instead it returns . prec FalseTrue prec TrueFalse pred False3*** Exception: Prelude.Enum.Bool.pred: bad argumentHreludeReturns c if given H outside range.safeToEnum @Bool 0 Just FalsesafeToEnum @Bool 1 Just TruesafeToEnum @Bool 2NothingsafeToEnum @Bool (-1)NothingDEFGHDEFGH,(c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>SafeIreludedThis function returns the name of its caller function, but it requires that the caller function has # constraint. Otherwise, it returns " unknown".,foo :: HasCallStack => String; foo = ownNamefoo"foo"(bar :: HasCallStack => String; bar = foobar"foo"JreludeThis function returns the name of its caller of the caller function, but it requires that the caller function and caller of the caller function have # constraint. Otherwise, it returns " unkown". It's useful for logging:Qlog :: HasCallStack => String -> IO (); log s = putStrLn $ callerName ++ ":" ++ sggreeting :: HasCallStack => IO (); greeting = log "Starting..." >> putStrLn "Hello!" >> log "Ending..."greetinggreeting:Starting...Hello!greeting:Ending...IJIJ-(c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Safe"Krelude0Fmaps functions for nested bifunctor. Short for fmap (bimap f g).,bimapF not length $ Just (False, ['a', 'b']) Just (True,2)Lrelude Short for  fmap . first.%firstF not $ Just (False, ['a', 'b'])Just (True,"ab")Mrelude Short for  fmap . second.*secondF length $ Just (False, ['a', 'b'])Just (False,2)KLMKLM\(c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 KowainikMITKowainik <xrom.xkov@gmail.com>Unsafe&Nrelude Similar to  but with flipped arguments.NNMNOPQRMSTMSUMVWMVXMNYMNZMN[PQ\M]^M]_M`aMbcMbdMbeMbfPghPgiM]jMNkMNlMNmMNnMopMqrM`sM`tM`uM`vMwxMyzMy{My|MN}MN~MNMNMNMNMNMNMbMbPgMM`M`MNMNM]PgMM`MM`MMMoMqMNMMMMMMNMNPPPPPMMMMMMPM`M`PPMMMMMPPPMPMPPPMMPMMPPPMMbMbMNMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMyMMMMMMMMM M M M M MMMMMMMMMMMMMMMMMM M!M"#M"$M"%M"&M"'M()M(*M+,M+-M.Mw/Mw0Mw1Mw2Mw3Mw4Mw5Mw6Mw7Mw8Mw9Mw:M;M<M=M>M?M@MAMBCMBDMBEMBEMFGMHIMHJMHJMKLMMNMMOMPQMPRMSTMSUMSVMSWMSXMMYMZ[M\]M^_M^`MabMacMadMaeMafMghMgiMgiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzM{M|M}M~MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM`M`M`M`M`M`M`M`M`M`M`M`M`M`M`M`M`M`M`M`M`MbMb Mb Mb Mb Mb MMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMS MS!MS#MS$MS%MS"MS&M#$M#%M#&M#'M#(M#)M#*M#+M#,MV-MV.MV/M01M]2M]3M]4M]5M]6M78MN9MN:MN;MN<MN=MN/MN>MN?MN@MNAMNBMNCMNDMNEMNFMNGMNHMNIMNJMNKMNLMNMMNNMNOMNPMNQMNRMSMTMUMabPgVPgWPgXPgYPgZPg[Pg\Pg]Pg^Pg_`a8bcdbefbghbijbklmnomnpmnqmnrmnstuvtuwxyzxy{x|}x|~xxxxxxxxxxxxxxxxxxxxHHHH:xxxxx              2345 ;      !"#$%&'()*+,--./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u!v!w!x!y!z!{!|!}!~!!!"""B"C"D"E"F"G""""""""""#I#J##$$$$$$$$$$$$$$$$%&&&&&&&''''''(((((((())***************+++++,,---M0M0M0M0MM0M0M0M0MSMSMSMZMZMZMMMMMMKMKMK:M`8```7`M\MTMUMVMW````7`7`7MMMKMK#relude-0.5.0-20kLFagzhCjJeGfP8HGvhhRelude.List.Reexport Relude.BaseRelude.Container.ReexportRelude.Bool.ReexportRelude.FunctionRelude.NumericRelude.Monad.ReexportRelude.Functor.ReexportRelude.String.Reexport Relude.MonoidRelude.ApplicativeRelude.Foldable.ReexportRelude.Lifted.ConcurrentRelude.Lifted.IORefRelude.ExceptionRelude.Monad.EitherRelude.Functor.Fmap Relude.UnsafeRelude.DeepSeqRelude.Lifted.ExitRelude.Monad.MaybeRelude.Lifted.FileRelude.Monad.Trans Relude.NubRelude.String.Conversion Relude.Print Relude.MonadRelude.List.NonEmptyRelude.Bool.GuardRelude.Container.OneRelude.Foldable.FoldRelude.Extra.Map Relude.File Relude.DebugRelude.Lifted.TerminalRelude.Extra.ValidationRelude.Extra.TypeRelude.Extra.TupleRelude.Extra.NewtypeRelude.Extra.LensRelude.Extra.GroupRelude.Extra.Foldable1Relude.Extra.EnumRelude.Extra.CallStackRelude.Extra.BifunctorPreludeidRelude.Functor System.ExitexitWith exitFailure exitSuccessdienubData.ByteString.Lazy ByteStringData.Text.LazyTextshow Relude.String Relude.List Relude.BoolRelude.ContainerRelude.Foldable Debug.Tracetrace traceShow traceShowId traceShowMtraceMtraceId Data.TextgetLineprint Relude.LiftedReludebaseGHC.Base++ghc-primGHC.PrimseqGHC.Listfilterzip Data.Tuplefstsnd otherwisemap$coerceGHC.Num fromInteger-GHC.Real fromRationalGHC.EnumenumFrom enumFromThen enumFromToenumFromThenTo GHC.Classes==>=negate>>=>>fmapreturnControl.Monad.Failfail Data.String fromString fromIntegral realToFrac toInteger toRational Control.MonadguardGHC.ExtsIsListfromList fromListN<>memptymappendmconcatjoin<*>pure*>BoundedEnumEq GHC.FloatFloating FractionalIntegralMonadFunctorNumOrdGHC.ReadReadReal RealFloatRealFracGHC.ShowShowData.Typeable.InternalTypeable MonadFailIsString Applicative Data.FoldableFoldableData.Traversable Traversable GHC.GenericsGeneric GHC.TypeNatsKnownNatGHC.OverloadedLabelsIsLabel SemigroupMonoid GHC.TypesBoolCharDoubleFloatIntGHC.IntInt8Int16Int32Int64 integer-gmpGHC.Integer.TypeInteger GHC.NaturalNatural GHC.MaybeMaybeOrderingRatioRationalIOWordGHC.WordWord8Word16Word32Word64 Data.EitherEitherType ConstraintNatCmpNat CoercibleGHC.Stack.Types CallStackD#FalseF#NothingJustTrueLeftRightLTEQGTGHC.IO.Handle.TypesHandleboundedEnumFromThenboundedEnumFrommaxIntminIntData.Functor.ContravariantcomparisonEquivalencedefaultEquivalencedefaultComparison>$$<>$<$<phantom>$ contramap Contravariant getPredicate Predicate getComparison ComparisongetEquivalence EquivalencegetOpOpData.Functor.Compose getComposeCompose Data.VoidvacuousabsurdVoidData.Semigroup mtimesDefaultcycle1 WrappedMonoid getOptionOptionsortWithData.BitraversablebifoldMapDefault bimapDefaultbifor bisequence bitraverse BitraversableData.BifoldablebifindbiallbianybiorbiandbielembilengthbinullbiListbiasum bisequence_bifor_ bitraverse_bifoldlMbifoldl'bifoldrMbifoldr'bifoldlbifoldr bifoldMapbifold BifoldableData.Bifunctorsecondfirstbimap BifunctorData.List.NonEmptyinitlasttailheadnonEmptyGHC.ExecutionStackshowStackTrace getStackTraceControl.Monad.IO.ClassliftIOMonadIO fromLabelmfilter<$!>unless replicateM_ replicateM zipWithM_zipWithM mapAndUnzipMforever<=<>=>filterM mapAccumR mapAccumLforMsequencemapM sequenceAtraverseControl.Applicativeoptional getZipListZipList Control.Arrow&&&Data.Functor.Identity runIdentityIdentity System.IOwithFileGHC.IO.Handle.FDstderrstdin GHC.StackwithFrozenCallStack callStack GHC.Conc.Sync writeTVarreadTVarnewTVarSTMTVarstdout GHC.IORefIORefGHC.IOFilePath GHC.ExceptionprettyCallStack prettySrcLocGHC.Exception.Type SomeExceptiondisplayException fromException toException ExceptionData.Functor.ConstgetConstConstfindallanyorand concatMapconcatasum sequence_ sequenceA_forM_mapM_for_ traverse_foldlMlengthnulltoListfoldl'foldrfoldMapfold Data.MonoidgetFirstFirstgetLastLastgetApApData.Semigroup.Internal stimesMonoidstimesIdempotentgetDualDualappEndoEndogetAllAllgetAnyAnygetSumSum getProductProductgetAltAlt someNatValnatValSomeNat Data.OldListunfoldrsortOnsortBysort permutations subsequencestailsinitsgroupgenericReplicategenericSplitAt genericDrop genericTake genericLength transpose intercalate intersperse isPrefixOf Text.Read readMaybereads fromRightfromLeftisRightisLeftpartitionEithersrightsleftseitherData.Ord comparingDown Data.ProxyProxyControl.Category>>><<< GHC.IO.IOMode ReadWriteMode AppendMode WriteModeReadModeIOModeatanhacoshasinhtanhcoshsinhatanacosasintancossinlogBase**sqrtexppiisIEEEisNegativeZeroisDenormalized isInfiniteisNaN encodeFloat decodeFloat floatRange floatDigits floatRadix byteSwap64 byteSwap32 byteSwap16 Data.BitstoIntegralSizedxor Data.Boolbool Data.Function&onfix Data.Functorvoid$><&><$>lcmgcd^^^oddeven denominator numeratordivModquotRemmoddivremquotrecip/floorceilingroundtruncateproperFractionmaxBoundminBoundfromEnumtoEnumpredsuccGHC.Charchrunzip3unzipzipWithzip3!!reversebreaksplitAtdroptake dropWhile takeWhilecycle replicaterepeatiteratescanrscanluncons Data.MaybemapMaybe catMaybes listToMaybe maybeToList fromMaybefromJust isNothingisJustmaybeswapuncurrycurryGHC.MVarMVarsubtractsignumabs*+ GHC.Stack.CCScurrentCallStackasTypeOf$!flip.constordwhen=<<liftA3<**>stimessconcat<$<*liftA2manysome<|>empty Alternativemplusmzero MonadPlus:|NonEmptyString getCallStack HasCallStackstimesIdempotentMonoid/=<=compare&&||not<>maxminbytestring-0.10.8.2Data.ByteString.Internalcontainers-0.6.0.1Data.IntMap.InternalIntMapData.IntSet.InternalIntSetData.Map.InternalMapData.Sequence.InternalSeqData.Set.InternalSetdeepseq-1.4.4.0Control.DeepSeqforce$!!deepseqrnfNFData'hashable-1.2.7.0-2SI038axTEd7AEZJ275kpiData.Hashable.Class hashWithSaltHashabletransformers-0.5.5.0Control.Monad.Trans.Classlift MonadTransControl.Monad.Trans.Identity runIdentityT IdentityT mtl-2.2.2Control.Monad.State.Classgetsmodify'modifystateputget MonadStateControl.Monad.Reader.Classasksreaderlocalask MonadReaderControl.Monad.Trans.ExceptExceptT runExceptTControl.Monad.Trans.ReaderReaderT runReaderTReader runReader withReader withReaderT Control.Monad.Trans.State.StrictStateT runStateTStaterunState evalState execState withState evalStateT execStateT stm-2.5.0.0Control.Concurrent.STM.TVar modifyTVar' text-1.2.3.1unwordsunlineslineswordsData.Text.Encoding decodeUtf8'decodeUtf8WithData.Text.InternalData.Text.Encoding.Error lenientDecode strictDecodeOnError OnDecodeErrorUnicodeExceptionControl.Monad.Trans.MaybeexceptToMaybeTmaybeToExceptT runMaybeTMaybeT4unordered-containers-0.2.10.0-LgoTL3wbBEY5bZIDJiyxW4Data.HashSet.BaseHashSetData.HashMap.BaseHashMappass appliedToidentity<<$>>flap?? newEmptyMVarnewMVarputMVarreadMVarswapMVartakeMVar tryPutMVar tryReadMVar tryTakeMVar atomically newTVarIO readTVarIOnewIORef readIORef writeIORef modifyIORef modifyIORef'atomicModifyIORefatomicModifyIORef'atomicWriteIORef?:whenJust whenJustM whenNothing whenNothing_ whenNothingM whenNothingM_readFile writeFile appendFile usingReaderT usingReader usingStateT usingStateevaluatingStateTevaluatingStateexecutingStateTexecutingState hoistMaybe hoistEither maybeToMonoidordNubhashNubsortNub unstableNub LazyStricttoLazytoStrictToStringtoStringToLTexttoLTextToTexttoText ConvertUtf8 encodeUtf8 decodeUtf8decodeUtf8Strict LByteStringLText readEitherfromLazy fromStrict$fConvertUtf8TextByteString$fConvertUtf8TextByteString0$fConvertUtf8[]ByteString$fConvertUtf8TextByteString1$fConvertUtf8TextByteString2$fConvertUtf8[]ByteString0 $fToTextText $fToTextText0 $fToText[] $fToLTextText$fToLTextText0 $fToLText[]$fToStringText$fToStringText0 $fToString[]$fLazyStrictTextText $fLazyStrictByteStringByteStringputText putTextLnputLText putLTextLnputBSputBSLnputLBSputLBSLn leftToMaybe rightToMaybe maybeToRight maybeToLeftwhenLeft whenLeft_ whenLeftM whenLeftM_ whenRight whenRight_ whenRightM whenRightM_$fMonadFailEither chainedTo viaNonEmpty whenNotNull whenNotNullMBugExcbug$fExceptionBug $fShowBug evaluateWHNF evaluateWHNF_ evaluateNF evaluateNF_whenMunlessMifMguardM&&^||^integerToBoundedintegerToNaturalOneOneItemone $fOneIntSet $fOneHashSet$fOneSet $fOneIntMap $fOneHashMap$fOneMap$fOneByteString$fOneByteString0 $fOneText $fOneText0$fOneSeq $fOneNonEmpty$fOne[]ElemErrorMessage DisallowElem flipfoldl'asumMapfoldMapAfoldMapMsumproductelemnotElemandMorMallManyM DynamicMapinsert insertWithdeletealter StaticMapKeyValsizelookupmember!? notMember lookupDefaulttoPairskeyselems$fStaticMapIntSet$fStaticMapHashSet$fStaticMapSet$fStaticMapIntMap$fStaticMapHashMap$fStaticMapMap$fDynamicMapIntMap$fDynamicMapHashMap$fDynamicMapMap readFileText writeFileTextappendFileText readFileLTextwriteFileLTextappendFileLText readFileBS writeFileBS appendFileBS readFileLBS writeFileLBS appendFileLBS Undefinederror undefined $fEqUndefined$fOrdUndefined$fShowUndefined$fReadUndefined$fEnumUndefined$fBoundedUndefined$fDataUndefined$fGenericUndefinedputStrputStrLn ValidationFailureSuccessvalidationToEithereitherToValidation$fBitraversableValidation$fBifoldableValidation$fBifunctorValidation$fTraversableValidation$fFoldableValidation$fAlternativeValidation$fApplicativeValidation$fFunctorValidation$fEqValidation$fOrdValidation$fShowValidationtypeNamedupemapToFstmapToSndmapBoth traverseToFst traverseToSnd traverseBothunwrapunderunder2underF2#.Lens'lensviewsetover^..~%~groupBy groupOneBy Foldable1foldMap1fold1 toNonEmptyhead1last1maximum1minimum1foldl1'$fFoldable1Sum$fFoldable1Product$fFoldable1Compose$fFoldable1(,)$fFoldable1Identity$fFoldable1NonEmptyuniverse inverseMapnextprec safeToEnumownName callerNamebimapFfirstFsecondFatControl.Concurrent.MVar Data.IORefData.Text.Internal.LazyData.ByteString.Lazy.Internal Data.Text.IOData.Text.Lazy.IOData.ByteStringData.ByteString.Char8Data.ByteString.Lazy.Char8 impureThrowevaluateGHC.Err