<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Util</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[ window.onload = function () {pageLoad();setSynopsis("mini_Util.html");}; //]]> </script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ghc-7.4.2: The GHC API</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Util</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Flags dependent on the compiler build </a></li><li><a href="#g:2">General list processing </a></li><li><a href="#g:3">Tuples </a></li><li><a href="#g:4">List operations controlled by another list </a></li><li><a href="#g:5">For loop </a></li><li><a href="#g:6">Sorting </a></li><li><a href="#g:7">Comparisons </a></li><li><a href="#g:8">Edit distance </a></li><li><a href="#g:9">Transitive closures </a></li><li><a href="#g:10">Strictness </a></li><li><a href="#g:11">Module names </a></li><li><a href="#g:12">Argument processing </a></li><li><a href="#g:13">Floating point </a></li><li><a href="#g:14">read helpers </a></li><li><a href="#g:15">IO-ish utilities </a></li><li><a href="#g:16">Filenames and paths </a></li><li><a href="#g:17">Utils for defining Data instances </a></li><li><a href="#g:18">Utils for printing C code </a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>Highly random utility functions </p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:ghciSupported">ghciSupported</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:debugIsOn">debugIsOn</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:ncgDebugIsOn">ncgDebugIsOn</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:ghciTablesNextToCode">ghciTablesNextToCode</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isDynamicGhcLib">isDynamicGhcLib</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isWindowsHost">isWindowsHost</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isWindowsTarget">isWindowsTarget</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isDarwinTarget">isDarwinTarget</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:zipEqual">zipEqual</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> [a] -> [b] -> [(a, b)]</li><li class="src short"><a href="#v:zipWithEqual">zipWithEqual</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> (a -> b -> c) -> [a] -> [b] -> [c]</li><li class="src short"><a href="#v:zipWith3Equal">zipWith3Equal</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]</li><li class="src short"><a href="#v:zipWith4Equal">zipWith4Equal</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> (a -> b -> c -> d -> e) -> [a] -> [b] -> [c] -> [d] -> [e]</li><li class="src short"><a href="#v:zipLazy">zipLazy</a> :: [a] -> [b] -> [(a, b)]</li><li class="src short"><a href="#v:stretchZipWith">stretchZipWith</a> :: (a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> b -> (a -> b -> c) -> [a] -> [b] -> [c]</li><li class="src short"><a href="#v:unzipWith">unzipWith</a> :: (a -> b -> c) -> [(a, b)] -> [c]</li><li class="src short"><a href="#v:mapFst">mapFst</a> :: (a -> c) -> [(a, b)] -> [(c, b)]</li><li class="src short"><a href="#v:mapSnd">mapSnd</a> :: (b -> c) -> [(a, b)] -> [(a, c)]</li><li class="src short"><a href="#v:mapAndUnzip">mapAndUnzip</a> :: (a -> (b, c)) -> [a] -> ([b], [c])</li><li class="src short"><a href="#v:mapAndUnzip3">mapAndUnzip3</a> :: (a -> (b, c, d)) -> [a] -> ([b], [c], [d])</li><li class="src short"><a href="#v:nOfThem">nOfThem</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> a -> [a]</li><li class="src short"><a href="#v:filterOut">filterOut</a> :: (a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> [a]</li><li class="src short"><a href="#v:partitionWith">partitionWith</a> :: (a -> <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> b c) -> [a] -> ([b], [c])</li><li class="src short"><a href="#v:splitEithers">splitEithers</a> :: [<a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> a b] -> ([a], [b])</li><li class="src short"><a href="#v:foldl1-39-">foldl1'</a> :: (a -> a -> a) -> [a] -> a</li><li class="src short"><a href="#v:foldl2">foldl2</a> :: (acc -> a -> b -> acc) -> acc -> [a] -> [b] -> acc</li><li class="src short"><a href="#v:count">count</a> :: (a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li class="src short"><a href="#v:all2">all2</a> :: (a -> b -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> [b] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:lengthExceeds">lengthExceeds</a> :: [a] -> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:lengthIs">lengthIs</a> :: [a] -> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:lengthAtLeast">lengthAtLeast</a> :: [a] -> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:listLengthCmp">listLengthCmp</a> :: [a] -> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></li><li class="src short"><a href="#v:atLength">atLength</a> :: ([a] -> b) -> (<a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> b) -> [a] -> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> b</li><li class="src short"><a href="#v:equalLength">equalLength</a> :: [a] -> [b] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:compareLength">compareLength</a> :: [a] -> [b] -> <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></li><li class="src short"><a href="#v:isSingleton">isSingleton</a> :: [a] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:only">only</a> :: [a] -> a</li><li class="src short"><a href="#v:singleton">singleton</a> :: a -> [a]</li><li class="src short"><a href="#v:notNull">notNull</a> :: [a] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:snocView">snocView</a> :: [a] -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> ([a], a)</li><li class="src short"><a href="#v:isIn">isIn</a> :: <a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> a => <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> a -> [a] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isn-39-tIn">isn'tIn</a> :: <a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> a => <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> a -> [a] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:fstOf3">fstOf3</a> :: (a, b, c) -> a</li><li class="src short"><a href="#v:sndOf3">sndOf3</a> :: (a, b, c) -> b</li><li class="src short"><a href="#v:thirdOf3">thirdOf3</a> :: (a, b, c) -> c</li><li class="src short"><a href="#v:firstM">firstM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m => (a -> m c) -> (a, b) -> m (c, b)</li><li class="src short"><a href="#v:first3M">first3M</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m => (a -> m d) -> (a, b, c) -> m (d, b, c)</li><li class="src short"><a href="#v:uncurry3">uncurry3</a> :: (a -> b -> c -> d) -> (a, b, c) -> d</li><li class="src short"><a href="#v:takeList">takeList</a> :: [b] -> [a] -> [a]</li><li class="src short"><a href="#v:dropList">dropList</a> :: [b] -> [a] -> [a]</li><li class="src short"><a href="#v:splitAtList">splitAtList</a> :: [b] -> [a] -> ([a], [a])</li><li class="src short"><a href="#v:split">split</a> :: <a href="../base-4.5.1.0/Data-Char.html#t:Char">Char</a> -> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> [<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>]</li><li class="src short"><a href="#v:dropTail">dropTail</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> [a] -> [a]</li><li class="src short"><a href="#v:nTimes">nTimes</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> (a -> a) -> a -> a</li><li class="src short"><a href="#v:sortLe">sortLe</a> :: (a -> a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> [a]</li><li class="src short"><a href="#v:sortWith">sortWith</a> :: <a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> b => (a -> b) -> [a] -> [a]</li><li class="src short"><a href="#v:minWith">minWith</a> :: <a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> b => (a -> b) -> [a] -> a</li><li class="src short"><a href="#v:on">on</a> :: (a -> a -> c) -> (b -> a) -> b -> b -> c</li><li class="src short"><a href="#v:isEqual">isEqual</a> :: <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:eqListBy">eqListBy</a> :: (a -> a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> [a] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:eqMaybeBy">eqMaybeBy</a> :: (a -> a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:thenCmp">thenCmp</a> :: <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a> -> <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a> -> <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></li><li class="src short"><a href="#v:cmpList">cmpList</a> :: (a -> a -> <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a>) -> [a] -> [a] -> <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></li><li class="src short"><a href="#v:removeSpaces">removeSpaces</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></li><li class="src short"><a href="#v:fuzzyMatch">fuzzyMatch</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> [<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>] -> [<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>]</li><li class="src short"><a href="#v:fuzzyLookup">fuzzyLookup</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> [(<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>, a)] -> [a]</li><li class="src short"><a href="#v:transitiveClosure">transitiveClosure</a> :: (a -> [a]) -> (a -> a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> [a]</li><li class="src short"><a href="#v:seqList">seqList</a> :: [a] -> b -> b</li><li class="src short"><a href="#v:looksLikeModuleName">looksLikeModuleName</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:getCmd">getCmd</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> (<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>, <a href="../base-4.5.1.0/Data-String.html#t:String">String</a>)</li><li class="src short"><a href="#v:toCmdArgs">toCmdArgs</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> (<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>, [<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>])</li><li class="src short"><a href="#v:toArgs">toArgs</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> [<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>]</li><li class="src short"><a href="#v:readRational">readRational</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Prelude.html#t:Rational">Rational</a></li><li class="src short"><a href="#v:maybeRead">maybeRead</a> :: <a href="../base-4.5.1.0/Text-Read.html#t:Read">Read</a> a => <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a</li><li class="src short"><a href="#v:maybeReadFuzzy">maybeReadFuzzy</a> :: <a href="../base-4.5.1.0/Text-Read.html#t:Read">Read</a> a => <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a</li><li class="src short"><a href="#v:doesDirNameExist">doesDirNameExist</a> :: <a href="../base-4.5.1.0/System-IO.html#t:FilePath">FilePath</a> -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:modificationTimeIfExists">modificationTimeIfExists</a> :: <a href="../base-4.5.1.0/System-IO.html#t:FilePath">FilePath</a> -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="../old-time-1.1.0.0/System-Time.html#t:ClockTime">ClockTime</a>)</li><li class="src short"><a href="#v:global">global</a> :: a -> <a href="IOEnv.html#t:IORef">IORef</a> a</li><li class="src short"><a href="#v:consIORef">consIORef</a> :: <a href="IOEnv.html#t:IORef">IORef</a> [a] -> a -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:globalM">globalM</a> :: <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> a -> <a href="IOEnv.html#t:IORef">IORef</a> a</li><li class="src short"><span class="keyword">type</span> <a href="#t:Suffix">Suffix</a> = <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></li><li class="src short"><a href="#v:splitLongestPrefix">splitLongestPrefix</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> (<a href="../base-4.5.1.0/Data-Char.html#t:Char">Char</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> (<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>, <a href="../base-4.5.1.0/Data-String.html#t:String">String</a>)</li><li class="src short"><a href="#v:escapeSpaces">escapeSpaces</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></li><li class="src short"><a href="#v:parseSearchPath">parseSearchPath</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> [<a href="../base-4.5.1.0/System-IO.html#t:FilePath">FilePath</a>]</li><li class="src short"><span class="keyword">data</span> <a href="#t:Direction">Direction</a> <ul class="subs"><li>= <a href="#v:Forwards">Forwards</a> </li><li>| <a href="#v:Backwards">Backwards</a> </li></ul></li><li class="src short"><a href="#v:reslash">reslash</a> :: <a href="Util.html#t:Direction">Direction</a> -> <a href="../base-4.5.1.0/System-IO.html#t:FilePath">FilePath</a> -> <a href="../base-4.5.1.0/System-IO.html#t:FilePath">FilePath</a></li><li class="src short"><a href="#v:abstractConstr">abstractConstr</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Data.html#t:Constr">Constr</a></li><li class="src short"><a href="#v:abstractDataType">abstractDataType</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Data.html#t:DataType">DataType</a></li><li class="src short"><a href="#v:mkNoRepType">mkNoRepType</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Data.html#t:DataType">DataType</a></li><li class="src short"><a href="#v:charToC">charToC</a> :: <a href="../base-4.5.1.0/Data-Word.html#t:Word8">Word8</a> -> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></li></ul></div><div id="interface"><h1 id="g:1">Flags dependent on the compiler build </h1><div class="top"><p class="src"><a name="v:ghciSupported" class="def">ghciSupported</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:debugIsOn" class="def">debugIsOn</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:ncgDebugIsOn" class="def">ncgDebugIsOn</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:ghciTablesNextToCode" class="def">ghciTablesNextToCode</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isDynamicGhcLib" class="def">isDynamicGhcLib</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isWindowsHost" class="def">isWindowsHost</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isWindowsTarget" class="def">isWindowsTarget</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isDarwinTarget" class="def">isDarwinTarget</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><h1 id="g:2">General list processing </h1><div class="top"><p class="src"><a name="v:zipEqual" class="def">zipEqual</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> [a] -> [b] -> [(a, b)]</p></div><div class="top"><p class="src"><a name="v:zipWithEqual" class="def">zipWithEqual</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> (a -> b -> c) -> [a] -> [b] -> [c]</p></div><div class="top"><p class="src"><a name="v:zipWith3Equal" class="def">zipWith3Equal</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]</p></div><div class="top"><p class="src"><a name="v:zipWith4Equal" class="def">zipWith4Equal</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> (a -> b -> c -> d -> e) -> [a] -> [b] -> [c] -> [d] -> [e]</p></div><div class="top"><p class="src"><a name="v:zipLazy" class="def">zipLazy</a> :: [a] -> [b] -> [(a, b)]</p><div class="doc"><p><code><a href="Util.html#v:zipLazy">zipLazy</a></code> is a kind of <code><a href="../base-4.5.1.0/Data-List.html#v:zip">zip</a></code> that is lazy in the second list (observe the ~) </p></div></div><div class="top"><p class="src"><a name="v:stretchZipWith" class="def">stretchZipWith</a> :: (a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> b -> (a -> b -> c) -> [a] -> [b] -> [c]</p><div class="doc"><p><code>stretchZipWith p z f xs ys</code> stretches <code>ys</code> by inserting <code>z</code> in the places where <code>p</code> returns <code>True</code> </p></div></div><div class="top"><p class="src"><a name="v:unzipWith" class="def">unzipWith</a> :: (a -> b -> c) -> [(a, b)] -> [c]</p></div><div class="top"><p class="src"><a name="v:mapFst" class="def">mapFst</a> :: (a -> c) -> [(a, b)] -> [(c, b)]</p></div><div class="top"><p class="src"><a name="v:mapSnd" class="def">mapSnd</a> :: (b -> c) -> [(a, b)] -> [(a, c)]</p></div><div class="top"><p class="src"><a name="v:mapAndUnzip" class="def">mapAndUnzip</a> :: (a -> (b, c)) -> [a] -> ([b], [c])</p></div><div class="top"><p class="src"><a name="v:mapAndUnzip3" class="def">mapAndUnzip3</a> :: (a -> (b, c, d)) -> [a] -> ([b], [c], [d])</p></div><div class="top"><p class="src"><a name="v:nOfThem" class="def">nOfThem</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> a -> [a]</p></div><div class="top"><p class="src"><a name="v:filterOut" class="def">filterOut</a> :: (a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> [a]</p><div class="doc"><p>Like filter, only it reverses the sense of the test </p></div></div><div class="top"><p class="src"><a name="v:partitionWith" class="def">partitionWith</a> :: (a -> <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> b c) -> [a] -> ([b], [c])</p><div class="doc"><p>Uses a function to determine which of two output lists an input element should join </p></div></div><div class="top"><p class="src"><a name="v:splitEithers" class="def">splitEithers</a> :: [<a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> a b] -> ([a], [b])</p><div class="doc"><p>Teases a list of <code><a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a></code>s apart into two lists </p></div></div><div class="top"><p class="src"><a name="v:foldl1-39-" class="def">foldl1'</a> :: (a -> a -> a) -> [a] -> a<a href="../base-4.5.1.0/src/Data-List.html#foldl1%27" class="link">Source</a></p><div class="doc"><p>A strict version of <code><a href="../base-4.5.1.0/Data-List.html#v:foldl1">foldl1</a></code> </p></div></div><div class="top"><p class="src"><a name="v:foldl2" class="def">foldl2</a> :: (acc -> a -> b -> acc) -> acc -> [a] -> [b] -> acc</p></div><div class="top"><p class="src"><a name="v:count" class="def">count</a> :: (a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></p></div><div class="top"><p class="src"><a name="v:all2" class="def">all2</a> :: (a -> b -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> [b] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:lengthExceeds" class="def">lengthExceeds</a> :: [a] -> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><pre> (lengthExceeds xs n) = (length xs > n) </pre></div></div><div class="top"><p class="src"><a name="v:lengthIs" class="def">lengthIs</a> :: [a] -> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:lengthAtLeast" class="def">lengthAtLeast</a> :: [a] -> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:listLengthCmp" class="def">listLengthCmp</a> :: [a] -> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></p></div><div class="top"><p class="src"><a name="v:atLength" class="def">atLength</a> :: ([a] -> b) -> (<a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> b) -> [a] -> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> b</p><div class="doc"><p><code>atLength atLen atEnd ls n</code> unravels list <code>ls</code> to position <code>n</code>. Precisely: </p><pre> atLength atLenPred atEndPred ls n | n < 0 = atLenPred n | length ls < n = atEndPred (n - length ls) | otherwise = atLenPred (drop n ls) </pre></div></div><div class="top"><p class="src"><a name="v:equalLength" class="def">equalLength</a> :: [a] -> [b] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:compareLength" class="def">compareLength</a> :: [a] -> [b] -> <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></p></div><div class="top"><p class="src"><a name="v:isSingleton" class="def">isSingleton</a> :: [a] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:only" class="def">only</a> :: [a] -> a</p></div><div class="top"><p class="src"><a name="v:singleton" class="def">singleton</a> :: a -> [a]</p></div><div class="top"><p class="src"><a name="v:notNull" class="def">notNull</a> :: [a] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:snocView" class="def">snocView</a> :: [a] -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> ([a], a)</p></div><div class="top"><p class="src"><a name="v:isIn" class="def">isIn</a> :: <a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> a => <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> a -> [a] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isn-39-tIn" class="def">isn'tIn</a> :: <a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> a => <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> a -> [a] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><h1 id="g:3">Tuples </h1><div class="top"><p class="src"><a name="v:fstOf3" class="def">fstOf3</a> :: (a, b, c) -> a</p></div><div class="top"><p class="src"><a name="v:sndOf3" class="def">sndOf3</a> :: (a, b, c) -> b</p></div><div class="top"><p class="src"><a name="v:thirdOf3" class="def">thirdOf3</a> :: (a, b, c) -> c</p></div><div class="top"><p class="src"><a name="v:firstM" class="def">firstM</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m => (a -> m c) -> (a, b) -> m (c, b)</p></div><div class="top"><p class="src"><a name="v:first3M" class="def">first3M</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m => (a -> m d) -> (a, b, c) -> m (d, b, c)</p></div><div class="top"><p class="src"><a name="v:uncurry3" class="def">uncurry3</a> :: (a -> b -> c -> d) -> (a, b, c) -> d</p></div><h1 id="g:4">List operations controlled by another list </h1><div class="top"><p class="src"><a name="v:takeList" class="def">takeList</a> :: [b] -> [a] -> [a]</p></div><div class="top"><p class="src"><a name="v:dropList" class="def">dropList</a> :: [b] -> [a] -> [a]</p></div><div class="top"><p class="src"><a name="v:splitAtList" class="def">splitAtList</a> :: [b] -> [a] -> ([a], [a])</p></div><div class="top"><p class="src"><a name="v:split" class="def">split</a> :: <a href="../base-4.5.1.0/Data-Char.html#t:Char">Char</a> -> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> [<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>]</p></div><div class="top"><p class="src"><a name="v:dropTail" class="def">dropTail</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> [a] -> [a]</p></div><h1 id="g:5">For loop </h1><div class="top"><p class="src"><a name="v:nTimes" class="def">nTimes</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -> (a -> a) -> a -> a</p><div class="doc"><p>Compose a function with itself n times. (nth rather than twice) </p></div></div><h1 id="g:6">Sorting </h1><div class="top"><p class="src"><a name="v:sortLe" class="def">sortLe</a> :: (a -> a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> [a]</p></div><div class="top"><p class="src"><a name="v:sortWith" class="def">sortWith</a> :: <a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> b => (a -> b) -> [a] -> [a]</p></div><div class="top"><p class="src"><a name="v:minWith" class="def">minWith</a> :: <a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> b => (a -> b) -> [a] -> a</p></div><div class="top"><p class="src"><a name="v:on" class="def">on</a> :: (a -> a -> c) -> (b -> a) -> b -> b -> c</p></div><h1 id="g:7">Comparisons </h1><div class="top"><p class="src"><a name="v:isEqual" class="def">isEqual</a> :: <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:eqListBy" class="def">eqListBy</a> :: (a -> a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> [a] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:eqMaybeBy" class="def">eqMaybeBy</a> :: (a -> a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:thenCmp" class="def">thenCmp</a> :: <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a> -> <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a> -> <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></p></div><div class="top"><p class="src"><a name="v:cmpList" class="def">cmpList</a> :: (a -> a -> <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a>) -> [a] -> [a] -> <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></p></div><div class="top"><p class="src"><a name="v:removeSpaces" class="def">removeSpaces</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></p></div><h1 id="g:8">Edit distance </h1><div class="top"><p class="src"><a name="v:fuzzyMatch" class="def">fuzzyMatch</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> [<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>] -> [<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>]</p></div><div class="top"><p class="src"><a name="v:fuzzyLookup" class="def">fuzzyLookup</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> [(<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>, a)] -> [a]</p><div class="doc"><p>Search for possible matches to the users input in the given list, returning a small number of ranked results </p></div></div><h1 id="g:9">Transitive closures </h1><div class="top"><p class="src"><a name="v:transitiveClosure" class="def">transitiveClosure</a> :: (a -> [a]) -> (a -> a -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> [a] -> [a]</p></div><h1 id="g:10">Strictness </h1><div class="top"><p class="src"><a name="v:seqList" class="def">seqList</a> :: [a] -> b -> b</p></div><h1 id="g:11">Module names </h1><div class="top"><p class="src"><a name="v:looksLikeModuleName" class="def">looksLikeModuleName</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><h1 id="g:12">Argument processing </h1><div class="top"><p class="src"><a name="v:getCmd" class="def">getCmd</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> (<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>, <a href="../base-4.5.1.0/Data-String.html#t:String">String</a>)</p></div><div class="top"><p class="src"><a name="v:toCmdArgs" class="def">toCmdArgs</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> (<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>, [<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>])</p></div><div class="top"><p class="src"><a name="v:toArgs" class="def">toArgs</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> [<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>]</p></div><h1 id="g:13">Floating point </h1><div class="top"><p class="src"><a name="v:readRational" class="def">readRational</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Prelude.html#t:Rational">Rational</a></p></div><h1 id="g:14">read helpers </h1><div class="top"><p class="src"><a name="v:maybeRead" class="def">maybeRead</a> :: <a href="../base-4.5.1.0/Text-Read.html#t:Read">Read</a> a => <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a</p></div><div class="top"><p class="src"><a name="v:maybeReadFuzzy" class="def">maybeReadFuzzy</a> :: <a href="../base-4.5.1.0/Text-Read.html#t:Read">Read</a> a => <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a</p></div><h1 id="g:15">IO-ish utilities </h1><div class="top"><p class="src"><a name="v:doesDirNameExist" class="def">doesDirNameExist</a> :: <a href="../base-4.5.1.0/System-IO.html#t:FilePath">FilePath</a> -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:modificationTimeIfExists" class="def">modificationTimeIfExists</a> :: <a href="../base-4.5.1.0/System-IO.html#t:FilePath">FilePath</a> -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="../old-time-1.1.0.0/System-Time.html#t:ClockTime">ClockTime</a>)</p></div><div class="top"><p class="src"><a name="v:global" class="def">global</a> :: a -> <a href="IOEnv.html#t:IORef">IORef</a> a</p></div><div class="top"><p class="src"><a name="v:consIORef" class="def">consIORef</a> :: <a href="IOEnv.html#t:IORef">IORef</a> [a] -> a -> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> ()</p></div><div class="top"><p class="src"><a name="v:globalM" class="def">globalM</a> :: <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> a -> <a href="IOEnv.html#t:IORef">IORef</a> a</p></div><h1 id="g:16">Filenames and paths </h1><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Suffix" class="def">Suffix</a> = <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></p></div><div class="top"><p class="src"><a name="v:splitLongestPrefix" class="def">splitLongestPrefix</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> (<a href="../base-4.5.1.0/Data-Char.html#t:Char">Char</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>) -> (<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>, <a href="../base-4.5.1.0/Data-String.html#t:String">String</a>)</p></div><div class="top"><p class="src"><a name="v:escapeSpaces" class="def">escapeSpaces</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></p></div><div class="top"><p class="src"><a name="v:parseSearchPath" class="def">parseSearchPath</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> [<a href="../base-4.5.1.0/System-IO.html#t:FilePath">FilePath</a>]</p><div class="doc"><p>The function splits the given string to substrings using the <code><a href="../filepath-1.3.0.0/System-FilePath-Posix.html#v:searchPathSeparator">searchPathSeparator</a></code>. </p></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Direction" class="def">Direction</a> </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Forwards" class="def">Forwards</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:Backwards" class="def">Backwards</a></td><td class="doc empty"> </td></tr></table></div></div><div class="top"><p class="src"><a name="v:reslash" class="def">reslash</a> :: <a href="Util.html#t:Direction">Direction</a> -> <a href="../base-4.5.1.0/System-IO.html#t:FilePath">FilePath</a> -> <a href="../base-4.5.1.0/System-IO.html#t:FilePath">FilePath</a></p></div><h1 id="g:17">Utils for defining Data instances </h1><div class="top"><p class="src"><a name="v:abstractConstr" class="def">abstractConstr</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Data.html#t:Constr">Constr</a></p></div><div class="top"><p class="src"><a name="v:abstractDataType" class="def">abstractDataType</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Data.html#t:DataType">DataType</a></p></div><div class="top"><p class="src"><a name="v:mkNoRepType" class="def">mkNoRepType</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <a href="../base-4.5.1.0/Data-Data.html#t:DataType">DataType</a><a href="../base-4.5.1.0/src/Data-Data.html#mkNoRepType" class="link">Source</a></p><div class="doc"><p>Constructs a non-representation for a non-presentable type </p></div></div><h1 id="g:18">Utils for printing C code </h1><div class="top"><p class="src"><a name="v:charToC" class="def">charToC</a> :: <a href="../base-4.5.1.0/Data-Word.html#t:Word8">Word8</a> -> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></p></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.11.0</p></div></body></html>