简体   繁体   中英

Does Scala's list form a monoid under the concatenation operator?

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?

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM