我正在阅读《Scala编程》(红皮书)。
在关于单子的章节中,我理解什么是单子同态,例如:字符串单子 M
通过连接和长度函数 f
保留了单子结构,因此它们是同态的。
M.op(f(x), f(y)) == M.op(f(x) + f(y))
// "Lorem".length + "ipsum".length == ("Lorem" + "ipsum").length
引用书中的话(从记忆中,如有错误请指正):
当这种情况在两个方向上发生时,它被命名为单子同构,这意味着对于单子M,N和函数f、g,f andThen g和g andThen f是identity函数。例如,具有连接的字符串Monoid和List[Char] Monoid是同构的。
但我看不到实际的例子来证明这一点,我只能想到f是length函数,但g会发生什么?
注意:我看过这个问题:What are isomorphism and homomorphisms。
f
和g
将会是toVector
和toList
,对吗? - Alejandro Alcalde