-- SYNTAX2

type STRUCT2 = S SUM  B -- Boolean operators
              (O ONLY N -- Numeric operators
              )
        
type SYNTAX2 = REC STRUCT2

-- VALUE2

type VALUE2 =  SUM Bool
             (ONLY Int)

-- COMPUTE2

type COMPUTE2 = ErrT Id

-- SEMANTICS2

type SEMANTICS2 = COMPUTE2 VALUE2

-- driver

parser2 :: TheParser SYNTAX2
parser2 = do { blanks ; parser }

parseWith2 :: (SYNTAX2 -> IO ()) -> [Char] -> IO ()
parseWith2 cont = parser2 `invokeWith` cont

unparse2 :: SYNTAX2 -> IO ()
unparse2 = fold

interpret2 :: SYNTAX2 -> SEMANTICS2
interpret2 = fold

run2 :: SEMANTICS2 -> IO ()
run2 = runIO

main2 :: IO ()
main2 = driver "2> " parseWith2 unparse2 interpret2 run2



 


