import Data.Monoid
import Control.Applicative
newtype NT m a
= NT
(m a
) deriving (Eq,Show)
instance (Monoid a, Applicative m) => Monoid (NT m a) where
mempty = NT $ pure mempty
mappend (NT a) (NT b) = NT $ mappend <$> a <*> b
main = do
print $ (NT
(Just
"a") <> NT
(Just
"b")) <> NT
(Just
"c") print $ NT
(Just
"a") <> (NT
(Just
"b") <> NT
(Just
"c")) print $ (NT
["a"] <> NT
["b"]) <> NT
["c"] print $ NT
["a"] <> (NT
["b"] <> NT
["c"]) print $ (NT
(Just
$ NT
["a"]) <> NT
(Just
$ NT
["b"])) <> NT
(Just
$ NT
["c"]) print $ NT
(Just
$ NT
["a"]) <> (NT
(Just
$ NT
["b"]) <> NT
(Just
$ NT
["c"]))
aW1wb3J0IERhdGEuTW9ub2lkCmltcG9ydCBEYXRhLkZ1bmN0b3IKaW1wb3J0IENvbnRyb2wuQXBwbGljYXRpdmUKCm5ld3R5cGUgTlQgbSBhID0gTlQgKG0gYSkgZGVyaXZpbmcgKEVxLFNob3cpCgppbnN0YW5jZSAoTW9ub2lkIGEsIEFwcGxpY2F0aXZlIG0pID0+IE1vbm9pZCAoTlQgbSBhKSB3aGVyZQogICAgbWVtcHR5ID0gTlQgJCBwdXJlIG1lbXB0eQogICAgbWFwcGVuZCAoTlQgYSkgKE5UIGIpID0gTlQgJCBtYXBwZW5kIDwkPiBhIDwqPiBiCgptYWluID0gZG8KICAgIHByaW50ICQgKE5UIChKdXN0ICJhIikgPD4gIE5UIChKdXN0ICJiIikpIDw+IE5UIChKdXN0ICJjIikKICAgIHByaW50ICQgIE5UIChKdXN0ICJhIikgPD4gKE5UIChKdXN0ICJiIikgIDw+IE5UIChKdXN0ICJjIikpCiAgICBwcmludCAkIChOVCBbImEiXSA8PiAgTlQgWyJiIl0pIDw+IE5UIFsiYyJdCiAgICBwcmludCAkICBOVCBbImEiXSA8PiAoTlQgWyJiIl0gIDw+IE5UIFsiYyJdKQogICAgcHJpbnQgJCAoTlQgKEp1c3QgJCBOVCBbImEiXSkgPD4gIE5UIChKdXN0ICQgTlQgWyJiIl0pKSA8PiBOVCAoSnVzdCAkIE5UIFsiYyJdKQogICAgcHJpbnQgJCAgTlQgKEp1c3QgJCBOVCBbImEiXSkgPD4gKE5UIChKdXN0ICQgTlQgWyJiIl0pICA8PiBOVCAoSnVzdCAkIE5UIFsiYyJdKSkKICAgIA==