module JoinList where
data JoinList m a = Empty
| Single m a
| Append m (JoinList m a) (JoinList m a)
deriving (Eq, Show)
-- Exercise 1
tag :: Monoid m => JoinList m a -> m
tag Empty = mempty
tag Single m _ = m
tag Append m _ _ = m
(+++) :: Monoid m => JoinList m a -> JoinList m a -> JoinList m a
(+++) jl1 jl2 = mappend jl1 jl2