module Exercise_7 where import Data.List {-WETT-} trancl :: Eq a => [(Integer,(a,a))] -> [(Integer,(a,a))] trancl xs | ys == xs = xs | otherwise = trancl ys where ys = (nub . filter (\(dx,(fx,sx)) -> all (\(dy,(fy,sy)) -> fx /= fy || sx /= sy || dx <= dy) ts)) ts ts = xs ++ (concat [[x | (dy,(fy,sy)) <- xs, let x = (dx+dy, (fx, sy)), sx == fy] | (dx,(fx,sx)) <- xs]) {-TTEW-}