Functional Programming Refresher

A Magma is a set with a (closed) binary operation. A Semigroup is a magma where the operation is associative. class Semigroup a where (<>) :: a -> a -> a -- ^ read as "append" Must sati...

By · · 1 min read

Source: dev.to

A Magma is a set with a (closed) binary operation. A Semigroup is a magma where the operation is associative. class Semigroup a where (<>) :: a -> a -> a -- ^ read as "append" Must satisfy: (x <> y) <> z == x <> (y <> z) -- associativity Example: [1,2] <> [3,4] <> [5] == [1,2,3,4,5] A Monoid is a semigroup with an identity element. class Semigroup a => Monoid a where mempty :: a -- ^ identity element of <> Must satisfy: mempty <> x == x -- left identity x <> mempty == x -- right identity (x <> y) <> z == x <> (y <> z) -- associativity (from Semigroup) Note: mappend is a historical name for <> and is now deprecated. Example: mempty <> [1,2] == [1,2] singleton 1 <> mempty == singleton 1 A Group is a monoid where every element has an inverse. class Monoid a => Group a where invert :: a -> a -- ^ inverse of <> Must satisfy: x <> invert x == mempty == invert x &lt