-import qualified FastString as FS
-#endif
-
-#if defined(__GLASGOW_HASKELL__)
-#define SLIT(x) (FS.mkLitString# (x#))
-#define FSLIT(x) (FS.mkFastString# (x#))
-#else
-#define SLIT(x) (FS.mkLitString (x))
-#define FSLIT(x) (FS.mkFastString (x))
-#endif
+-- do { c <- getChar; MASSERT( isUpper c ); ... }
+-- do { c <- getChar; MASSERT2( isUpper c, text "Bad" ); ... }
+-- do { str <- getStr; ASSERTM( flagSet str ); .. }
+-- do { str <- getStr; ASSERTM2( flagSet str, text "Bad" ); .. }
+-- do { str <- getStr; WARNM2( flagSet str, text "Flag is set" ); .. }
+#define MASSERT(e) ASSERT(e) return ()
+#define MASSERT2(e,msg) ASSERT2(e,msg) return ()
+#define ASSERTM(e) do { bool <- e; MASSERT(bool) }
+#define ASSERTM2(e,msg) do { bool <- e; MASSERT2(bool,msg) }
+#define WARNM2(e,msg) do { bool <- e; WARN(bool, msg) return () }