Semigroup
class Semigroup a where
(<>) :: a -> a -> a
sconcat :: NonEmpty a -> a
stimes :: Integral b => b -> a -> a
class Semigroup a => Monoid a where
mempty :: a
mappend :: a -> a -> a
mappend = (<>)
mconcat :: [a] -> a
mconcat = foldr mappend mempty
半群(Semigroup)是個類型類,它是幺半群(Monoid)的基類。
Prelude Data.List.NonEmpty Data.Semigroup> Sum <> Sum
Sum {getSum = }
Prelude Data.List.NonEmpty Data.Semigroup> sconcat $ Sum :| [Sum ]
Sum {getSum = }
Prelude Data.List.NonEmpty Data.Semigroup> [] <> []
[,]
Prelude Data.List.NonEmpty Data.Semigroup> sconcat $ [] :| [[]]
[,]
Prelude Data.List.NonEmpty Data.Semigroup> stimes []
[,,]
Prelude Data.List.NonEmpty Data.Semigroup> ( :| []) <> ( :| [])
:| [,,]
Prelude Data.List.NonEmpty Data.Semigroup> stimes $ :| []
:| [,,,,]
Prelude Data.List.NonEmpty Data.Semigroup> stimes $ Sum
Sum {getSum = }
運算符 <> 的實作與 Monoid 中的 mempty 同義。
sconcat a 将 NonEmpty 清單 a 中的各個元素用運算符 <> 連接配接起來。
stimes b a 将 a 重複 b 次,然後用運算符 <> 連接配接起來。