import Data.Monoid

data Big a = Big [Bool] (Sum Int) String (Endo a) Any

instance Semigroup (Big a) where
  (Big bs sum s en any) <> (Big bs' sum' str en' any')
    = Big
        (bs <> bs') (sum <> sum') (s <> str) (en <> en') (any <> any')