nTimes,
-- sorting
- sortLe, sortWith,
+ sortLe, sortWith, on,
-- transitive closures
transitiveClosure,
removeSpaces,
-- strictness
- foldl', seqList,
+ seqList,
-- pairs
unzipWith,
#include "HsVersions.h"
-import Panic ( panic, trace )
import FastTypes
+#ifdef DEBUG
+import Panic ( panic, trace )
+#endif
+
import Control.Exception ( Exception(..), finally, catchDyn, throw )
import qualified Control.Exception as Exception
import Data.Dynamic ( Typeable )
import System.IO.Unsafe ( unsafePerformIO )
import Data.IORef ( readIORef, writeIORef )
-import qualified Data.List as List ( elem, notElem )
-
+import qualified Data.List as List ( elem )
#ifndef DEBUG
import Data.List ( zipWith4 )
+#else
+import qualified Data.List as List ( notElem )
#endif
import Control.Monad ( when )
sortWith get_key xs = sortLe le xs
where
x `le` y = get_key x < get_key y
+
+on :: (a -> a -> Ordering) -> (b -> a) -> b -> b -> Ordering
+on cmp sel = \x y -> sel x `cmp` sel y
+
\end{code}
%************************************************************************
%* *
%************************************************************************
-A strict version of foldl.
-
-\begin{code}
-foldl' :: (a -> b -> a) -> a -> [b] -> a
-foldl' f z xs = lgo z xs
- where
- lgo z [] = z
- lgo z (x:xs) = (lgo $! (f z x)) xs
-\end{code}
-
A combination of foldl with zip. It works with equal length lists.
\begin{code}
\end{code}
\begin{code}
+-- This (with a more general type) is Data.List.stripPrefix from GHC 6.8.
+-- This definition can be removed once we require at least 6.8 to build.
maybePrefixMatch :: String -> String -> Maybe String
maybePrefixMatch [] rest = Just rest
maybePrefixMatch (_:_) [] = Nothing