12/04/14 05:12:10.70
まあいいや、関数合成のオーバーロードは無しで
>>312の言う通りHasAも隠蔽すれば良いんだな?
data HasA = HasA String Integer deriving Eq
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
main = print $ map (gizz . buzz . fizz) [1,3,5,7,15,21,35,105]