fork download
  1. import Data.Monoid
  2. import Data.Functor
  3. import Control.Applicative
  4.  
  5. newtype NT m a = NT (m a) deriving (Eq,Show)
  6.  
  7. instance (Monoid a, Applicative m) => Monoid (NT m a) where
  8. mempty = NT $ pure mempty
  9. mappend (NT a) (NT b) = NT $ mappend <$> a <*> b
  10.  
  11. main = do
  12. print $ (NT (Just "a") <> NT (Just "b")) <> NT (Just "c")
  13. print $ NT (Just "a") <> (NT (Just "b") <> NT (Just "c"))
  14. print $ (NT ["a"] <> NT ["b"]) <> NT ["c"]
  15. print $ NT ["a"] <> (NT ["b"] <> NT ["c"])
  16. print $ (NT (Just $ NT ["a"]) <> NT (Just $ NT ["b"])) <> NT (Just $ NT ["c"])
  17. print $ NT (Just $ NT ["a"]) <> (NT (Just $ NT ["b"]) <> NT (Just $ NT ["c"]))
  18.  
Success #stdin #stdout 0s 4704KB
stdin
Standard input is empty
stdout
NT (Just "abc")
NT (Just "abc")
NT ["abc"]
NT ["abc"]
NT (Just (NT ["abc"]))
NT (Just (NT ["abc"]))