Monad有以下组件。
的方法
如果有一个结构有1,2不管成分,我能说它是一元吗?
当然,如果一个结构有1和2,它可以被组合。但它不需要担心还是不用担心?
编辑:
我认为联想性,同一性是关于构图的。如果一个结构完全有,那它就是一个Monad。我的问题是关于“一元”。Monad最重要的因素是mu(连接),所以如果一个结构只有mu,那么它会不会是一元论的东西呢?
或者一元论只是Monad的形容词。
“一元”意味着它是Monad的一个因素。
Monad的一元结构
Monad的一元型m a,
Monadic a -> m a Monad,
Monad的一元合成 >=>
..。
发布于 2022-03-28 15:45:46
这看起来像是两个问题:一个是关于术语的问题,另一个是关于单一法则是否只与“构图”有关的问题。
关于术语问题..。
正如@cstml在评论中指出的那样,范畴理论中有一个“一元函子”的正式定义,但我不认为Haskell程序员通常在这种形式上使用“一元”,而且看起来你并不是在问这个问题。
当我使用“一元”一词时,我通常是在“与一元相关的事物”的意义上使用它。因此,一元操作是表单m a对Monad m的表示,当我参与一元编程时,我使用的是monads。
我通常不会在“类单体”的意义上使用它,但我可以看到可能会说“箭头有某种一元行为,但它们不一定是一元”。另一方面,如果你不加限制地说“类型X是一元”,这听起来只是一种不寻常的说法“类型X是单一的”。
关于单一法律问题..。
尽管Haskell的单一律通常用return和>>=来表示,但只有return、fmap和join才能制定出一套可供选择的法律。也就是说,join算子本身满足恒等式和结合律,它们或多或少地等价于>>=所满足的规律。
具体而言,任何一家公司都遵守明显的法律:
fmap f . return = return . f
join . fmap return = id
join . return = id如果有一个支持操作的对象:
return :: a -> m a -- convert from `a` by functor
join :: m (m a) -> m a -- change `m m` to `m`但不符合上述任何一条定律,那就不太“一元论”了。
如果符合上述法律,则由下列机构确定的组成:
x >>= f = join (fmap f x)将自动满足通常的Haskell左右标识法:
return a >>= k = k a
m >>= return = m因此,这些法律并不是“仅仅是关于构图”。
上面提到的唯一通常的Haskell定律是相联性。和其他的一样,它可以用join和fmap来表示,而不是>>=,它的形式如下:
join . fmap h . join . fmap k = join . fmap (join . fmap h . k)基本上,结合性问题既可以表示为单箭头组合的结合性,也可以表示为作用于类型join的m m m a操作的结合性--换句话说,你是先加入外层还是首先加入内层?
https://stackoverflow.com/questions/71642111
复制相似问题