-- $Id: back_prop.curry,v 1.7 2004/03/31 13:51:15 orlov Exp $ data Data = A | B | C | D A `eq` A = True A `eq` B = False A `eq` C = False A `eq` D = False B `eq` A = False B `eq` B = True B `eq` C = False B `eq` D = False C `eq` A = False C `eq` B = False C `eq` C = True C `eq` D = False D `eq` A = False D `eq` B = False D `eq` C = False D `eq` D = True a2b [] = [] a2b (x:xs) | x `eq` A = B:(a2b xs) | otherwise = x:(a2b xs) back_prop_slow n | (a2b x) =:= (replicate n B) & x =:= (replicate n y) = x ^Iwhere x free; y free back_prop_fast n | x =:= (replicate n y) & (a2b x) =:= (replicate n B) = x where x free; y free