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