草庐IT

c++ - 修改不可变子结构

假设我有一个不可变的包装器:templatestructimmut{Tconst&get()const{return*state;}immutmodify(std::functionf)const{returnimmut{f(*state)};}immut(Tin):state(std::make_shared(std::move(in))){}private:std::shared_ptrstate;};如果我有一个immutb,我可以转Bob(Bob)操作成可以代替我的东西b.templatestd::function(immut)>on_immut(std::functionf)

c++ - 如何在 C++ 中使用 std::optional

在C++17中引入了std::optional,我很高兴这个决定,直到我看到ref.我从Scala、Haskell和Java8知道Optional/Maybe,其中optional是一个monad并遵循monadic法则。C++17实现中不是这种情况。我应该如何使用std::optional,没有像map和flatMap/bind这样的函数,那是什么使用std::optional与例如返回-1或函数计算结果失败时的nullptr相比有优势吗?对我来说更重要的是,为什么std::optional没有设计成monad,有什么原因吗? 最佳答案

io和未来[选项] monad变形金刚

我试图弄清楚如何使用Scalaz7IO和MonadTransformers以优雅的纯正式功能来编写这件代码,但无法使我围绕它。试想一下我有一个简单的API:deffindUuid(request:Request):Option[String]=???deffindProfile(uuid:String):Future[Option[Profile]]=redisClient.get[Profile](uuid)使用此API,我可以轻松地使用OptiontTransformer像这样的optiont变压器编写不纯函数:valprofileT=for{uuid正如您已经注意到的那样-此功能包含带有

java - 抽屉导航菜单子(monad)类别

我的应用程序中有一个抽屉导航,使用DrawerLayout类和NavigationView。现在,我的抽屉通过扩充菜单xml文件来显示我的所有类别。我怎样才能得到它,以便其中一些类别由副标题和分隔符分隔? 最佳答案 您只需修改现有的菜单xml文件即可轻松完成此操作。您的代码将如下所示:您所要做的就是在每个项目中指定一个新菜单并为父项目指定一个标题! 关于java-抽屉导航菜单子(monad)类别,我们在StackOverflow上找到一个类似的问题: http

c++ - Haskell IO monad 的 C/C++ 包装器

我想从C/C++调用Haskell函数。我已经阅读了一些与该主题相关的教程,但是其中没有涉及IOmonad调用。特别是,我想调用一个使用interact函数的函数(interact::(String->String)->IO())。我不明白在这种情况下如何使用函数?如何在C/C++包装器中声明函数?如何在C/C++和Haskell之间转移标准输入/输出的控制(在C/C++代码中)? 最佳答案 我将让这个答案相对简短,因为大部分内容都包含在FFIdocumentation中。.您可以通过在C中按名称调用函数来使用它们。函数必须声明为f

mongodb - Scala 中的 Monad 转换器,用于理解处理选项和收集错误消息

我一直在查看大量Scalamonad转换器示例,但一直无法弄清楚如何做我认为可能很简单的事情。我想写一个forcomprehension来查找数据库(MongoDB)中的内容,它返回一个Option,然后如果那个Option是一个Some,查看其内容并获取另一个Option,依此类推。在每一步,如果我得到一个None,我想中止整个过程并生成一条错误消息,如“Xnotfound”。for理解应该产生一个Either(或类似的东西),其中Left包含错误消息和Right包含整个操作的成功结果(可能只是一个字符串,或者可能是使用沿途获得的几个值构造的对象)。到目前为止,我一直在单独使用Opt

mongodb - 斯科蒂使用 MongoDB

我对Haskell比较陌生,这是我第一次使用monad转换器。非常感谢您的帮助。runQuery::Pipe->Query->ActionM(EitherFailure[Document])runQuerypipequery=accesspipemaster"nutrition"(findquery>>=rest)main=dopipetext.pack$"Couldnotdecodetheuser:"++err++":\n"++(showb)Rightu->doletquery::Query=(select["i_name"=:["$in"=:map(unpack.name)(foo

mysql - 简单子(monad)查询时间太长,有什么选择吗?

我不知道如何让这个子查询变得非常慢以获取10k记录中的数据表代码:+--------+-----------+------------+|code_id|code_name|code_date|+--------+-----------+------------+|1|A1|2017-02-01||2|A2|2017-02-02||3|A3|2017-02-03||4|A4|2017-02-04||5|A5|2017-02-05||6|A6|2017-02-06||7|A7|2017-02-07||10000|A10000|2017-02-22|+--------+----------

mysql - 将 monad 组合翻译成 SQL

我正在Scala(http://github.com/getquill/quill)中开发一个语言集成查询库,并且有一种类型的monad组合我正在努力为其生成对应的SQL查询。可以为这些情况生成查询:t1.flatMap(a=>t2.filter(b=>b.s==a.s).map(b=>b.s))SELECTt2.sFROMt1,t2WHEREt2.s=t1.st1.flatMap(a=>t2.map(b=>b.s).take(10))SELECTx.sFROMt1,(SELECT*FROMt2LIMIT10)x但我不知道如何表达另一个:t1.flatMap(a=>t2.filter(

ios - RACStream 代表一个 monad 是什么意思?

来自文档RACStream代表一个“Monad”?有人可以解释这在RACStream的上下文中具体意味着什么。我在wiki上查找了功能含义,但我很难理解它如何使Reactive-Cocoa受益以及为什么选择这种模式? 最佳答案 在Objective-C的上下文中,RACStream是一个单子(monad)这一事实基本上意味着它遵循一种模式。在这种情况下,RACStream具有-bind:方法,这是更常用的-flattenMap:的更“原始”版本,这些方法本质上是使RACStream成为monad的原因。(查看documentatio