1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
{-# LANGUAGE NoImplicitPrelude #-}
module Data.Semigroup where
import Data.List.NonEmpty
infixr 6 <>
class Semigroup a where
(<>) :: a -> a -> a
x <> y = sconcat ( x :| [y] )
sconcat :: NonEmpty a -> a
sconcat (x :| xs) = go x xs where
go x [] = x
go x (y:ys) = x <> go y ys
-- stimes :: Integral b => b -> a -> a
instance Semigroup () where
_ <> _ = ()
sconcat _ = ()
instance (Semigroup a, Semigroup b) => Semigroup (a,b) where
(x,y) <> (x',y') = (x <> x', y <> y')
|