[project @ 2001-08-23 10:51:19 by simonmar]
[ghc-hetmet.git] / ghc / tests / specialise / spec001 / Main.hs
1 module Main where
2
3 data AList a = ANil | ACons a (AList a)
4
5 listtoalist []     = ANil
6 listtoalist (x:xs) = ACons x (listtoalist xs)
7
8 alisttolist ANil         = []
9 alisttolist (ACons a as) = (a : alisttolist as)
10
11 mapalist f ANil         = ANil
12 mapalist f (ACons a as) = ACons (f a) (mapalist f as)
13
14 tochar (C# c#) = c#
15 fromchar c# = C# c#
16 incchar c# = chr# (ord# c# +# 1#)
17
18 doalist as0
19   = let as1# = mapalist{-BChar-}    tochar   as0
20         as2# = mapalist{-CharChar-} incchar  as1#
21         as3  = mapalist{-CharB-}    fromchar as2#
22     in as3
23
24 dolist xs = alisttolist (doalist (listtoalist xs))
25
26 main = do
27     input <- getContents
28     putStr (unlines (map dolist (lines input)))
29
30
31 data AListChar = ANilChar | AConsChar Char# AListChar
32
33 mapalistBChar f ANil         = ANilChar
34 mapalistBChar f (ACons a as) = AConsChar (f a) (mapalistBChar f as)
35
36 mapalistCharChar f ANilChar         = ANilChar
37 mapalistCharChar f (AConsChar a as) = AConsChar (f a) (mapalistCharChar f as)
38
39 mapalistCharB f ANilChar         = ANil
40 mapalistCharB f (AConsChar a as) = ACons (f a) (mapalistCharB f as)