tutorial shampoo online empresa descargar constructora company haskell

online - haskell shampoo



Si "Lista" es un monoide, ¿cuál es su "conjunto"? (2)

En lugar de decir "Lista es un Monoide", sería más exacto decir "Para todos los tipos a, el tipo [a] es un Monoide". Entonces, para cualquier tipo particular a , su L será L = {set of all lists of as} . Y con esa definición, L, por supuesto, no puede contenerse.

Solo leí el libro de teoría de categorías y decidí aplicarlo a haskell.

El autor define a Monoid como:

Monoide es un conjunto L equipado con una operación binaria *: LxL-> L y un elemento de unidad distinguido u en L tal que etc ...

Al tomar una estructura de "Lista" como un monoide, está claro que la operación binaria es concat y la unidad es [] .

Pero, ¿cuál es el conjunto M aquí? Intenté L = {set of all lists} pero creo que eso me lleva a tener problemas con "¿está L en L?" Pregunta, que parece ser el mismo problema que tienen los conjuntos.

¿O estoy pensando en algo incorrectamente?

EDITAR: Como lo señaló @applicative, las listas de Haskell son monoides llamados monoides gratuitos .


Para cualquier tipo t puedes tener eso

L = all elements of the type [t]

entonces L es un monoide de forma trivial utilizando ++ . De hecho, formalizamos esto en Haskell.

class Monoid m where mempty :: m mappend :: m -> m -> m

esta es una "clase" de tipos que tienen las operaciones necesarias para formar un monoide, por lo que

instance Monoid [a] where mempty = [] mappend a b = a ++ b

de hecho, esto se conoce como el "monoide libre en un"