none' b _ = b
main
= let c1
= Context
(mod' 3) (none' "Fizz") $ c2
c2
= Context
(mod' 5) (none' "Bazz") None
c3 = Context (none' True) show None
in mapM_ (putStrLn . run [c1, c2, c3]) [1..100] where
run (Context f g n : cs) i = if f i then g i ++ run [n] i else run cs i
run _ _ = ""
ZGF0YSBDb250ZXh0ID0gQ29udGV4dCAoSW50IC0+IEJvb2wpIChJbnQgLT4gU3RyaW5nKSBDb250ZXh0IHwgTm9uZQoKbW9kJyBhIGIgPSBtb2QgYiBhID09IDAKbm9uZScgYiBfID0gYgoKbWFpbiA9IGxldCBjMSA9IENvbnRleHQgKG1vZCcgMykgKG5vbmUnICJGaXp6IikgJCBjMgogICAgICAgICAgIGMyID0gQ29udGV4dCAobW9kJyA1KSAobm9uZScgIkJhenoiKSBOb25lCiAgICAgICAgICAgYzMgPSBDb250ZXh0IChub25lJyBUcnVlKSBzaG93IE5vbmUKICAgICAgIGluIG1hcE1fIChwdXRTdHJMbiAuIHJ1biBbYzEsIGMyLCBjM10pIFsxLi4xMDBdIHdoZXJlCiAgICAgICAgICAgcnVuIChDb250ZXh0IGYgZyBuIDogY3MpIGkgPSBpZiBmIGkgdGhlbiBnIGkgKysgcnVuIFtuXSBpIGVsc2UgcnVuIGNzIGkKICAgICAgICAgICBydW4gXyBfID0gIiIg