Ruby中monad的等效结构是什么? 最佳答案 精确的技术定义:在Ruby中,monad可以是任何带有bind的类。和self.unit定义的方法使得对于所有实例m:m.class.unit[a].bind[f]==f[a]m.bind[m.class.unit]==mm.bind[f].bind[g]==m.bind[lambda{|x|f[x].bind[g]}]一些实际例子一个非常简单的monad示例是惰性Identitymonad,它模拟Ruby(一种严格的语言)中的惰性语义:classIddefinitialize(la
我目前正在研究结合Javascript中的monad的惰性求值,以及可能从中演化出哪些用例。所以我尝试实现一个惰性类型,它实现了functor/monad类型类。相应的构造函数在其参数和结果中是惰性的。这是我想出的://alazytype//(()->a)->()->bconstLazy=thunk=>()=>thunk();//(b->a->b)->b->Lazya->bLazy.fold=f=>acc=>tx=>f(acc)(tx());//(a->b)->Lazya->LazybLazy.map=f=>tx=>Lazy(()=>f(tx()));//Lazy(a->b)->Laz
请原谅我,我会尽力描述我正在寻找的东西。我没有它的名字,所以它变得更加困难。查看库,例如Folktale和monet.js,我喜欢能够使用map链接操作而无需空检查或if语句,例如使用也许,要么,任务。我想知道是否存在类似的构造来解决以下问题:我有初步意见。我想构建一个对输入进行操作的函数链。每个函数可能返回也可能不返回结果。如果函数没有返回结果,则调用链中的下一个函数。一旦函数返回结果,就忽略链中的其余函数(类似于map在Maybe.Nothing上ping一个函数)返回结果。换句话说,我正在寻找类似于Maybe的东西,它包含一个值并将函数映射到Just但忽略映射到Nothing的函
我想将以下JavaScript代码移植到Haskell:http://jsfiddle.net/mz68R/这是我尝试过的:importControl.ConcurrentimportData.IOReftypeEventStreama=IORef[MVara]newEventStream::IO(EventStreama)newEventStream=newIORef[]setEvent::EventStreama->a->IO()setEventstreamevent=readIORefstream>>=mapM_(`putMVar`event)getEvent::EventStr
我认为这不能称为“定点递归”,因为它太简单了。然而,我最近意识到它实际上可能是。我是否有效地实现了定点递归?这里是有问题的函数:/*recursivekleislifold*/varuntil=function(f){returnfunction(a){returnkleisli(f,until(f))(a);};};这里有一些额外的上下文://Theerrormonad'sbindvarbind_=function(f,m){returnm.m===Success?f(m.a):m;};varbind=function(f,m){returnm!==undefined&&m.m!==
我当时使用Bluebird进行异步处理,但现在必须进行大量的空/空/错误检查,如果不想使用其他路由,我也不想这么做。我想使用monad,但尚未完全了解它。我也希望它能与ramda的pipe/compose一起很好地播放,因为我的大多数其他代码都整齐地封装在功能管道中。根据manydiscussions的说法,与Promises相比,首选MonadicFutures(似乎建议使用Fluture),并且在将来的版本中可能会删除对pipeP和composeP的支持。Fluture似乎是一个不错的选择,因为它可以与遵循fantasy-landspecs的库(如ramda)一起很好地运行。但是,
软件开发爱好者notedthefollowing:Currentstatus:compulsivelyrewritingallmyJSaftermakingtheintuitiveconnectionbetweengeneratorfunctionsandmonadcomprehensions.我觉得我错过了什么。我对回调hell的解决方案是使用类似js-csp的东西(即队列)。我的问题是:JavaScript中的生成器函数和monad之间有什么联系? 最佳答案 没有。虽然生成器函数可能看起来与monad理解非常相似(即do表示法)
我查看了类似的问题和答案,但没有找到直接解决我的问题的答案。我正在努力理解如何使用Maybe或Either或Monads与管道功能结合使用。我想将函数连接在一起,但我希望管道停止并在任何步骤发生错误时返回错误。我正在尝试在node.js应用程序中实现函数式编程概念,这确实是我第一次认真探索这两者,所以没有任何答案会如此简单以至于侮辱我在这个主题上的智商。我写了一个像这样的管道函数:const_pipe=(f,g)=>async(...args)=>awaitg(awaitf(...args))module.exports={arguments.pipeAsync:async(...fn
我读了RobPike'spost但它只适用于重复循环。另一方面,我有这个。请注意我是如何添加err字段的,该字段可通过Error()方法访问,但徒劳地试图减少if错误。上面的代码比较简单,但是ReadRLP()函数和只返回一个err没什么区别。有什么模式可以帮助解决这个问题吗?typenamePreclaimRLPstruct{ObjectTaguintRlpMessageVersionuintAccountID[]uint8AccountNonceuint64CommitmentID[]uint8Feebig.IntTTLuint64errerror}func(n*namePrecl
我有一个包含一些数据的XML文件。该文件包含列和数据本身的描述。我可以读取列名称,但无法读取数据,因为我不明白如何将此行名称赋予将返回数据的函数。XML文件:Somestudy11128/12/2010Somestudy11203/03/2011Somestudy11309/06/2011示例代码:{-#LANGUAGEArrows#-}importText.XML.HXT.CoreimportData.Tree.NTree.TypeDefsparseXML::String->IOStateArrowsbXmlTreeparseXMLfile=readDocument[withVali