-- $Id: back_prop_opt_slow.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 = A2B x 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 B CONS B CONS B CONS B CONS B CONS B CONS B CONS B CONS B CONS B NIL
        CONS y CONS y CONS y CONS y CONS y CONS y CONS y CONS y CONS y CONS y NIL