-- $Id: back_prop_opt_fast.xsg,v 1.5 2004/03/31 13:51:15 orlov Exp $

data Char = A | B | C | D
data String = NIL | CONS Char String
data Int = O | I Int

F :: String -> String String
F x = x A2B x

A2B :: String -> String
A2B NIL       = NIL
A2B CONS A xs = CONS B A2B xs
A2B CONS x xs = CONS x A2B xs 

G :: Int Char -> String String
G n y = CONS y CONS y CONS y CONS y CONS y CONS y CONS y CONS y CONS y CONS y NIL
        CONS B CONS B CONS B CONS B CONS B CONS B CONS B CONS B CONS B CONS B NIL