instance Show HasA where show (HasA s n) = if s == "" then show n else s
instance Num HasA where (+) (HasA r m) (HasA s n) = HasA (r ++ s) (m + n) (-) (HasA r m) (HasA s n) = HasA "" (m - n) (*) (HasA r m) (HasA s n) = HasA "" (m * n) negate (HasA s n) = HasA s (-n) abs (HasA s n) = HasA s (abs n) fromInteger n = HasA "" n signum (HasA s n) = HasA s (signum n)
fizz (HasA s n) = HasA (s ++ if mod n 3 == 0 then "Fizz" else "") n buzz (HasA s n) = HasA (s ++ if mod n 5 == 0 then "Buzz" else "") n gizz (HasA s n) = HasA (s ++ if mod n 7 == 0 then "Gizz" else "") n