Mik*_*cki 10 monads haskell category-theory
根据Haskell wikibook,一个Monad被调用的m是Functor另外两个操作:
unit :: a -> m a
join :: m (m a) -> m a
Run Code Online (Sandbox Code Playgroud)
这很好,但我有一些不同的东西.粉饰血淋淋的细节,我有一个具有良好的类型unit和join功能,但它fmap没有得到很好的表现(fmap g . fmap f不一定fmap (g.f)).因此,它不能成为一个实例Monad.尽管如此,我还是希望尽可能多地提供通用功能.
所以我的问题是,什么类别的理论结构与monad相似,因为他们有a unit和join?
我意识到在某种程度上,上述问题是不明确的.对于monad而言unit,join定义仅在fmap定义方面有意义.没有fmap,你不能定义任何monad法则,所以任何unit/的定义join都同样"有效".所以我正在寻找除了fmap在这些unit和join函数上定义一些"非monad"定律可能有意义的函数.
那么,这里有一条关于 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)