我注意到“monad”这个词的使用方式似乎有些不一致。我开始相信这是因为那里的许多(如果不是大多数)monad 教程是由刚刚开始自己弄清楚 monad 的人编写的(例如:核废料太空服卷饼),所以这个学期结束了变得有点超载/损坏。
特别是,我想知道术语“monad”是否可以应用于类型的单个值,例如 Maybe、List 或 IO,或者术语“monad”是否真的应该只应用于类型本身。
这是一个微妙的区别,所以也许一个类比可能会更清楚。在数学中,我们有环、场、群等。这些术语适用于整个值集以及可以对它们执行的操作,而不是单个元素。例如,整数(连同加法、否定和乘法运算)形成一个环。你可以说“整数是一个环”,但你永远不会说“5 是一个环”。
那么,你能说“Just 5
是一个单子”,还是说“5是一个环”是错误的?我不知道范畴论,但我的印象是说“Maybe
是一个单子”而不是“Just 5
是一个单子”才有意义。