首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对Monad的深入理解

对Monad的深入理解
EN

Stack Overflow用户
提问于 2022-05-12 15:27:29
回答 1查看 107关注 0票数 2

有一次,我以为我理解Monad。然而,当我试图将我对代码的理解与理论联系起来时,我发现自己仍然不清楚。所以这里是:

第1部分:是流行的教育链接a-monad-is-just-a-monoid-in-the-category-of-endofunctors-whats-the-problem

我的问题:

  1. 得分最高的答案是monad是一元。单半群由一个集合S,一个运算*和e组成,它解释了单半群定义后的单子是什么。我要确认的第一件事是,集合S的元素是Monad定义中提到的失效函数T:X->X,对吗?
  2. 这个问题的标题引用了一个著名的短语:“内皮细胞范畴中的单样体”。在这里,我有点困惑于“内射物的类别”。我们所知的一个范畴是由对象和态射组成的。那么,在这里,我们可以正确地说,内射是对象,而前面的问题中提到的运算是态射吗?我不太明白"in“(中的一元)是怎么回事.数学上的平均。意思是“属于”、“是”还是“包括”?

第2部分.这里是另一个链接不,真的,什么是单曲?,我最初发现它非常有指导意义。然而,最近我发现我无法清楚地将其示例中的代码映射到正式定义中。我对Haskell的经验有限,所以我只关注它的c++示例代码。这是作者声称是单曲的那个。

代码语言:javascript
运行
复制
#include <iostream>
#include <string>

using namespace std;

string ret(string x) {
  return "[" + x + "]";
}

string bind(string x, string (*func) (string)) {
  return "[" + func(x.substr(1, x.length() - 2)) + "]";
}

string step1(string x) {
  return "Hello " + x;
}

string step2(string x) {
  return x + ", monads aren't that complicated."; 
}

string step3(string x) {
  return "***" + x + "***";
}

template<typename T> T run(T (*ret) (string), 
                           T (*bind) (T, string (*) (string))) {
  
  T x = "friend";
  
  // first, wrap up the value of x
  x = ret(x);
  
  // now use wrapCall to run each step
  x = bind(x, step1);
  x = bind(x, step2);
  x = bind(x, step3);
  return x;
}

int main() {
    cout << run<string>(ret, bind) << "\n";
}

然后作者说:

信不信由你,我们刚刚写了一个单曲(具体来说,monad是绑定和ret的对子)!

我的问题:

  1. 这里的函数string ret(string x)是否对应于e中的单半群定义?但是e应该适用于集合S元素。
  2. 在这段代码中,哪个函数是T(集合S的元素)?应该是个函子。我想step1, step2, step3是。然而,它们看起来不是函子,而是范畴。因为它们就像链接对象的箭头(输入string到type string)。一个函子应该把两个类别联系起来。
  3. bind是操作*(自然变换μ:t×T→T)吗?

希望我能说出我的困惑,任何帮助都是感激的。

EN

回答 1

Stack Overflow用户

发布于 2022-05-14 05:16:16

我想我已经搞清楚了。让我自己回答这个问题。在我发布的C++代码中,[]是类型构造函数,bind函数对应于Haskell中的fmap,因此它们形成了一个函子,这是这里提到的T a-monad-is-just-a-monoid-in-the-category-of-endofunctors-whats-the-problem

ret函数是自然变换,η。run实际上代表了自然的转换,μ。

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

https://stackoverflow.com/questions/72218331

复制
相关文章

相似问题

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