Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
- module JoinList where
- import Data.Monoid
- data JoinList m a = Empty
- | Single m a
- | Append m (JoinList m a) (JoinList m a)
- deriving (Eq, Show)
- tag :: Monoid m => JoinList m a -> m
- tag (Single m _) = m
- tag (Append m _ _) = m
- (+++) :: Monoid m => JoinList m a -> JoinList m a -> JoinList m a
- (+++) elem1@(Single m1 _) elem2@(Single m2 _) =
- Append (mappend (tag elem1) (tag elem2)) elem1 elem2
Advertisement
Add Comment
Please, Sign In to add comment