它不是单子,但它是什么?

Mik*_*cki 10 monads haskell category-theory

根据Haskell wikibook,一个Monad被调用的mFunctor另外两个操作:

unit :: a -> m a
join :: m (m a) -> m a
Run Code Online (Sandbox Code Playgroud)

这很好,但我有一些不同的东西.粉饰血淋淋的细节,我有一个具有良好的类型unitjoin功能,但它fmap没有得到很好的表现(fmap g . fmap f不一定fmap (g.f)).因此,它不能成为一个实例Monad.尽管如此,我还是希望尽可能多地提供通用功能.

所以我的问题是,什么类别的理论结构与monad相似,因为他们有a unitjoin

我意识到在某种程度上,上述问题是不明确的.对于monad而言unit,join定义仅在fmap定义方面有意义.没有fmap,你不能定义任何monad法则,所以任何unit/的定义join都同样"有效".所以我正在寻找除了fmap在这些unitjoin函数上定义一些"非monad"定律可能有意义的函数.

Dan*_*ton 3

那么,这里有一条关于 justunit和 的定律join。鉴于x :: m a,

join (unit x) = x
Run Code Online (Sandbox Code Playgroud)

为了表明这并非凭空而来,让我们从现有的单子定律开始:

return x >>= f = f x
Run Code Online (Sandbox Code Playgroud)

鉴于m >>= f = join (fmap f m)

join (fmap f (return x)) = f x
Run Code Online (Sandbox Code Playgroud)

选择f = id

join (fmap id (return x)) = id x
Run Code Online (Sandbox Code Playgroud)

使用函子定律fmap id = id

join (id (return x)) = id x
Run Code Online (Sandbox Code Playgroud)

使用显而易见的id a = a

join (return x) = x
Run Code Online (Sandbox Code Playgroud)