module REDef where data R = Eps | Single Char | Cat R R | Or R R | Star R deriving (Eq, Show) -- upTo n r = e + r + r^2 + ... + r^n upTo :: Int -> R -> R upTo n r | n > 0 = Eps `Or` Cat r (upTo (n-1) r) | n == 0 = Eps