[project @ 1996-01-08 20:28:12 by partain]
[ghc-hetmet.git] / ghc / compiler / tests / reader / read001.hs
diff --git a/ghc/compiler/tests/reader/read001.hs b/ghc/compiler/tests/reader/read001.hs
new file mode 100644 (file)
index 0000000..4a97768
--- /dev/null
@@ -0,0 +1,113 @@
+-- this module supposedly includes one of each Haskell construct
+
+-- HsImpExp stuff
+
+module OneOfEverything (
+       fixn, 
+       FooData,
+       FooDataB(..),
+       FooDataC( .. ),
+       EqTree(EqLeaf, EqBranch),
+       EqClass(..),
+       OrdClass(orda, ordb),
+       OneC.. ,
+       OneOfEverything..
+    ) where
+
+import OneA renaming   ( fA to renamedA )
+import OneB            ( fB )
+import OneC hiding     ( fC )
+import OneC hiding     ( fC ) renaming ( fc to renamedC )
+
+-- HsDecls stuff
+
+infix  6 `fixn`
+infixl 7 +#
+infixr 8 `fixr`
+
+fixn x y = x
+fixl x y = x
+fixr x y = x
+
+type Pair a b = (a, b)
+
+data FooData = FooCon Int
+
+data FooDataB = FooConB Double
+
+data (Eq a) => EqTree a = EqLeaf a | EqBranch (EqLeaf a) (EqLeaf a)
+
+class (Eq a) => EqClass a where
+    eqc :: a -> Char
+    eqc x = '?'
+
+class (Ord a) => OrdClass a where
+    orda :: a -> Char
+    ordb :: a -> Char
+    ordc :: a -> Char
+
+instance (Eq a) => EqClass (EqTree a) where
+    eqc x = 'a'
+
+default (Integer, Rational)
+
+-- HsBinds stuff
+
+singlebind x = x
+
+bindwith :: (OrdClass a, OrdClass b) => a -> b -> b
+bindwith a b = b
+
+reca a = recb a
+recb a = reca a
+
+(~(a,b,c)) | nullity b = a
+          | nullity c  = a
+          | otherwise  = a
+          where
+           nullity = null
+
+-- HsMatches stuff
+
+mat a b c d | foof a b = d
+           | foof a c = d
+           | foof b c = d
+           where
+               foof a b = a == b
+
+-- HsExpr stuff
+expr a b c d
+  = a
+  + (:) a b
+  + (a : b)
+  + (1 - 'c' - "abc" - 1.293)
+  + ( \ x y z -> x ) 42
+  + (9 *)
+  + (* 8)
+  + (case x of
+       [] | null x     -> 99
+          | otherwise  -> 98
+          | True       -> 97
+          where
+            null x = False
+    )
+  + [ z | z <- c, isSpace z ]
+  + let y = foo
+    in  y
+  + [1,2,3,4]
+  + (4,3,2,1)
+  + (4 :: Num a => a)
+  + (if 42 == 42.0 then 1 else 4)
+  + [1..]
+  + [2,4..]
+  + [3..5]
+  + [4,8..999]
+
+-- HsPat stuff
+f _ x 1 1.93 'c' "dog" ~y z@(Foo a b) (c `Bar` d) [1,2] (3,4) (n+42) = y
+
+-- HsLit stuff -- done above
+
+-- HsTypes stuff
+g :: (Num a, Eq b) => Foo a -> [b] -> (a,a,a) -> b
+g x y z = head y