fsimen

Untitled

May 26th, 2015
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. {-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
  2. module JoinList where
  3.     import Data.Monoid
  4.     data JoinList m a = Empty
  5.                       | Single m a
  6.                       | Append m (JoinList m a) (JoinList m a)
  7.                         deriving (Eq, Show)
  8.  
  9.  
  10.     tag :: Monoid m => JoinList m a -> m
  11.     tag (Single m _) = m
  12.     tag (Append m _ _) = m
  13.  
  14.     (+++) :: Monoid m => JoinList m a -> JoinList m a -> JoinList m a
  15.     (+++) elem1@(Single m1 _) elem2@(Single m2 _) =
  16.         Append (mappend (tag elem1) (tag elem2)) elem1 elem2
Advertisement
Add Comment
Please, Sign In to add comment