aboutsummaryrefslogtreecommitdiffstats
path: root/BackCompat.hs
diff options
context:
space:
mode:
authordaniel <daniel@wagner-home.com>2007-06-05 00:55:34 +0200
committerdaniel <daniel@wagner-home.com>2007-06-05 00:55:34 +0200
commiteed29a62d982f028370d4a9957bead22fcb27dda (patch)
tree6b9e7c286de3dd9ba4342778e2102c5a78f9400c /BackCompat.hs
parent84ac66c9f2e4fb0aacc569e33427719e5efb9661 (diff)
downloadXMonadContrib-eed29a62d982f028370d4a9957bead22fcb27dda.tar.gz
XMonadContrib-eed29a62d982f028370d4a9957bead22fcb27dda.tar.xz
XMonadContrib-eed29a62d982f028370d4a9957bead22fcb27dda.zip
Contrib package for 6.4 users
darcs-hash:20070604225534-c98ca-f7374f75c0e30ff72391ad1f226c94ca7519f590.gz
Diffstat (limited to 'BackCompat.hs')
-rw-r--r--BackCompat.hs41
1 files changed, 41 insertions, 0 deletions
diff --git a/BackCompat.hs b/BackCompat.hs
new file mode 100644
index 0000000..b743b83
--- /dev/null
+++ b/BackCompat.hs
@@ -0,0 +1,41 @@
+module XMonadContrib.BackCompat (forM, forM_) where
+
+{- This file will contain all the things GHC 6.4 users need to compile xmonad.
+ - Currently, the steps to get compilation are:
+ - add the following line to StackSet.hs, Operations.hs, and Main.hs:
+ - import XMonadContrib.BackCompat
+ -}
+
+import Data.Map (Map, fromList)
+import GHC.Read
+
+forM_ :: (Monad m) => [a] -> (a -> m b) -> m ()
+forM_ = flip mapM_
+
+-- not used yet, but just in case
+forM :: (Monad m) => [a] -> (a -> m b) -> m [b]
+forM = flip mapM
+
+instance (Ord k, Read k, Read e) => Read (Map k e) where
+ readsPrec _ = \s1 -> do
+ ("{", s2) <- lex s1
+ (xs, s3) <- readPairs s2
+ ("}", s4) <- lex s3
+ return (fromList xs, s4)
+
+-- parses a pair of things with the syntax a:=b
+-- stolen from the GHC 6.6 sources
+readPair :: (Read a, Read b) => ReadS (a,b)
+readPair s = do (a, ct1) <- reads s
+ (":=", ct2) <- lex ct1
+ (b, ct3) <- reads ct2
+ return ((a,b), ct3)
+
+readPairs :: (Read a, Read b) => ReadS [(a,b)]
+readPairs s1 = case readPair s1 of
+ [(p, s2)] -> case s2 of
+ (',':s3) -> do
+ (ps, s4) <- readPairs s3
+ return (p:ps, s4)
+ _ -> [([p], s2)]
+ _ -> [([],s1)]