-
@ fiatjaf
2024-01-14 13:55:28
# Haskell Monoids
You've seen that `<>` syntax and noticed it is imported from `Data.Monoid`?
I've always thought `<>` was a pretty complex mathematical function and it was very odd that people were using it for `Text` values, like `"whatever " <> textValue <> " end."`.
It turns out `Text` is a Monoid. That means it implements the Monoid class (or typeclass), that means it has a particular way of being concatenated. Any list could be a Monoid, any abstraction you can think of for which it makes sense to concatenate could be a Monoid, and it would use the same `<>` syntax. What exactly `<>` would do with that value when concatenating depends on its typeclass implementation of Monoid.
We can assume, for example, that `Text` implements Monoid by just joining the text bytes, and now we can use `<>` without getting puzzled about it.