--- /dev/null
+--!!! Testing Haskell 1.3 syntax
+
+-- Haskell 1.3 syntax differs from Haskell 1.2 syntax in several ways:
+
+-- * Qualified names in export lists
+module TestSyntax where
+
+-- * Qualified import/export
+
+-- 1) Syntax:
+
+import qualified Prelude as P
+
+import Prelude
+import qualified Prelude
+
+import Prelude ()
+import Prelude (fst,snd)
+import qualified Prelude(fst,snd)
+
+-- bizarre syntax allowed in draft of Haskell 1.3
+import Prelude(,)
+import Prelude(fst,snd,)
+import Prelude(Ord(..),Eq((==),(/=)),)
+import Prelude hiding (fst,snd,)
+
+import Prelude hiding (fst,snd)
+import qualified Prelude hiding (fst,snd)
+
+import Prelude as P
+import qualified Prelude as P
+
+import Prelude as P(fst,snd)
+import Prelude as P(,)
+import qualified Prelude as P(fst,snd)
+
+import Prelude as P hiding (fst,snd)
+import qualified Prelude as P hiding (fst,snd)
+
+-- 2) Use of qualified type names
+-- 3) Use of qualified constructors
+-- 4) Use of qualified variables
+
+-- * No n+k patterns (yippee!)
+-- (No tests yet)
+
+-- Some things are unchanged.
+
+-- * Unqualified imports and use of hiding/selective import.
+--
+-- Note: it's not clear how these various imports are supposed to
+-- interact with one another.
+-- John explains:
+-- 1) "hiding" lists etc are just abbreviations for very long
+-- lists.
+-- 2) Multiple imports are additive.
+-- (This makes the meaning order-independent!)
+-- Note: Hugs allows imports anywhere a topdecl is allowed.
+-- This isn't legal Haskell - but it does no harm.
+
+-- import Prelude(lex)
+-- import Prelude
+-- import Prelude hiding (lex)
+-- lex = 1 :: Int -- error unless we've hidden lex.
+
+
+
+-- * Qualified names
+
+-- Function/operator names
+myfilter x = Prelude.filter x -- argument added to avoid monomorphism restn
+mycompose = (Prelude..)
+
+-- Use of module synonyms
+myfilter2 p = P.filter p
+
+-- Method names
+myplus :: Num a => a -> a -> a
+myplus = (Prelude.+)
+
+-- Tycons
+myminus = (Prelude.-) :: Prelude.Int -> Prelude.Int -> Prelude.Int
+
+-- Type synonyms
+foo :: P.ShowS
+foo = foo
+
+-- Class names in instances
+instance P.Num P.Bool where
+ (+) = (P.||)
+ (*) = (P.&&)
+ negate = P.not
+
+instance (P.Num a, P.Num b) => P.Num (a,b) where
+ x + y = (fst x + fst y, snd x + snd y)
+
+-- Constructor names in expressions
+
+-- this used to break tidyInfix in parser.y
+-- Note that P.[] is _not_ legal!
+testInfixQualifiedCon = 'a' P.: [] :: String
+
+-- Constructor names in patterns
+f (P.Just x) = True
+f (P.Nothing) = False
+
+g (x P.: xs) = x
+
+y P.: ys = ['a'..]
+
+-- * Support for octal and hexadecimal numbers
+-- Note: 0xff and 0xFF are legal but 0Xff and 0XFF are not.
+-- ToDo: negative tests to make sure invalid numbers are excluded.
+
+d = ( -1, -0, 0, 1) :: (Int,Int,Int,Int)
+o = (-0o1,-0o0,0o0,0o1) :: (Int,Int,Int,Int)
+x = (-0x1,-0x0,0x0,0x1) :: (Int,Int,Int,Int)
+x' = (0xff,0xFf,0xfF,0xFF) :: (Int,Int,Int,Int)
+
+-- * No renaming or interface files
+-- We test that "interface", "renaming" and "to" are not reserved.
+
+interface = 1 :: Int
+renaming = 42 :: Int
+to = 2 :: Int
+