首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无论构图如何,如果只有一种方法将m(m )改为m,我可以说一元吗?

无论构图如何,如果只有一种方法将m(m )改为m,我可以说一元吗?
EN

Stack Overflow用户
提问于 2022-03-28 03:25:10
回答 1查看 130关注 0票数 0

Monad有以下组件。

  1. am a,由Functor
  2. a -> m b箭头从a转换而来,以及将m m转换为箭头的m
  3. composition of

的方法

如果有一个结构有1,2不管成分,我能说它是一元吗?

当然,如果一个结构有1和2,它可以被组合。但它不需要担心还是不用担心?

编辑:

我认为联想性,同一性是关于构图的。如果一个结构完全有,那它就是一个Monad。我的问题是关于“一元”。Monad最重要的因素是mu(连接),所以如果一个结构只有mu,那么它会不会是一元论的东西呢?

或者一元论只是Monad的形容词。

“一元”意味着它是Monad的一个因素。

Monad的一元结构

Monad的一元型m a,

Monadic a -> m a Monad,

Monad的一元合成 >=>

..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-28 15:45:46

这看起来像是两个问题:一个是关于术语的问题,另一个是关于单一法则是否只与“构图”有关的问题。

关于术语问题..。

正如@cstml在评论中指出的那样,范畴理论中有一个“一元函子”的正式定义,但我不认为Haskell程序员通常在这种形式上使用“一元”,而且看起来你并不是在问这个问题。

当我使用“一元”一词时,我通常是在“与一元相关的事物”的意义上使用它。因此,一元操作是表单m aMonad m的表示,当我参与一元编程时,我使用的是monads。

我通常不会在“类单体”的意义上使用它,但我可以看到可能会说“箭头有某种一元行为,但它们不一定是一元”。另一方面,如果你不加限制地说“类型X是一元”,这听起来只是一种不寻常的说法“类型X是单一的”。

关于单一法律问题..。

尽管Haskell的单一律通常用return>>=来表示,但只有returnfmapjoin才能制定出一套可供选择的法律。也就是说,join算子本身满足恒等式和结合律,它们或多或少地等价于>>=所满足的规律。

具体而言,任何一家公司都遵守明显的法律:

代码语言:javascript
复制
fmap f . return = return . f
join . fmap return = id
join . return = id

如果有一个支持操作的对象:

代码语言:javascript
复制
return :: a -> m a       -- convert from `a` by functor
join :: m (m a) -> m a   -- change `m m` to `m`

但不符合上述任何一条定律,那就不太“一元论”了。

如果符合上述法律,则由下列机构确定的组成:

代码语言:javascript
复制
x >>= f = join (fmap f x)

将自动满足通常的Haskell左右标识法:

代码语言:javascript
复制
return a >>= k = k a
m >>= return = m

因此,这些法律并不是“仅仅是关于构图”。

上面提到的唯一通常的Haskell定律是相联性。和其他的一样,它可以用joinfmap来表示,而不是>>=,它的形式如下:

代码语言:javascript
复制
join . fmap h . join . fmap k = join . fmap (join . fmap h . k)

基本上,结合性问题既可以表示为单箭头组合的结合性,也可以表示为作用于类型joinm m m a操作的结合性--换句话说,你是先加入外层还是首先加入内层?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71642111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档