First of all, sorry, but I'm not a native English speaker. I will however try to do my best.
I'm actually studying some theoretical concepts as a hobby to deepen my understandings of functional programming and have some questions to check that I correctly understood what a monoid is.
First of all, the definition of a monoid that I found is that a monoid is a set that is closed under an associative binary operation and has an identity element. I guess it's correct?
So, using the following definition, I suppose that Scala's lists form a monoid under the :::
operator, as List
is a set, :::
is associative (xs ::: (ys ::: zs) = (xs ::: ys) ::: zs)
and List
has a base element (Nil
). Am I right?
Regarding monoids, is there something to say about the ::
List
operator? I suppose not as it's not taking two lists as parameters, but an element and a List
. Am I still right?
⇒ The concatenation is associative and (Σ∗,∘,ϵ) is a monoid.
The algebraic structure semigroup is a set and an associated binary operator that combines two elements from the set. A monoid is a semigroup with the added identity element. To build our intuition about monoids, let's encode these definitions in Scala.
In functional programming, a monad is a software design pattern with a structure that combines program fragments (functions) and wraps their return values in a type with additional computation.
A monoid is a semigroup with an identity element. The identity element (denoted by e or E) of a set S is an element such that (aοe)=a, for every element a∈S. An identity element is also called a unit element. So, a monoid holds three properties simultaneously − Closure, Associative, Identity element.
First of all, the definition of a monoid that I found is that a monoid is a set that is closed under an associative binary operation and has an identity element. I guess it's correct?
As far as I know, that is correct. (disclaimer: I am still learning too).
So, using the following definition, I suppose that Scala's lists form a monoid under the ::: operator, as List is a set, ::: is associative (xs ::: (ys ::: zs) = (xs ::: ys) ::: zs) and List has a base element (Nil). Am I right?
Also correct.
For example here is the definition of Monoid[List[A]]
in Cats - and here is an specification of the Monoid[List[A]]
in Scalaz.
Both are libraries/frameworks for functional programming in scala, and as you can see they both define the Monoid for List using :::
and Nil
.
Regarding monoids, is there something to say about the :: List operator? I suppose not as it's not taking two lists as parameters, but an element and a List. Am I still right?
Again as far as I know, you're still right.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With