jjzjj

c# - IO monad 在像 C# 这样的语言中有意义吗

在花了很多时间阅读和思考之后,我想我终于掌握了monad是什么、它们如何工作以及它们有什么用处。我的主要目标是弄清楚monad是否可以应用于我在C#中的日常工作。当我开始学习monad时,我的印象是它们很神奇,它们以某种方式使IO和其他非纯函数变得纯。我理解monad对于.Net中的LINQ之类的东西的重要性,并且Maybe对于处理不返回有效值的函数非常有用。我也很欣赏限制代码状态和​​隔离外部依赖的需要,我希望monad也能帮助解决这些问题。但我最终得出结论,用于IO和处理状态的monad是Haskell的必需品,因为Haskell没有其他方法可以做到这一点(否则,你无法保证顺序,并

javascript - JavaScript 中的单子(monad)?

使用Monad的示例JavaScript代码看起来如何?我问是因为如果我能看到一个代码示例(并且JavaScript是一种简单的函数式语言,它可能是学习它的最佳语言),对Monad的理解会更清楚。 最佳答案 我将从用JavaScript编写您自己的monad开始。listmonad是一个很好的起点;我发现它是迄今为止最有用的。只需定义执行以下操作的函数:创建一个给定项目的列表(称之为mreturn)。创建一个空列表(称之为mzero)。将一个列表附加到另一个列表(称为mplus)。应用一个函数来转换给定列表中的每个元素(调用此map

javascript - 函数式响应式(Reactive)编程 (FRP) 可以用 monad 表达吗?

我一直在阅读FunctionalReactiveProgramming,虽然我没有在任何语言中广泛使用monad,但我情不自禁地在FRP设计中无处不在看到它们。Thisquestion'sanswers对什么是函数式响应式(Reactive)编程有一些精彩的描述,我不会在这里重复。基本上,FRP会在随时间变化的值之间建立关系。那么这不能用单子(monad)表示吗?将需要随时间修改的值的代码封装在monad中,将其称为Signal,然后像这样使用这些信号(为简单起见,使用Haskelldo-notation)。domx>=liftMsin--dosomestuffwiththeseval

javascript - JS Monad 单元函数

我正在努力理解JavaScript中的单元函数。特别是因为让我“得到”monad(或者至少我认为)的是Promise对象,以及then总是返回一个新的Promise,无论你传递给then什么函数,据我所知,它等同于haskell中的bind或>>=。这对我来说完全有意义,因为它可以确保您的所有功能都在“monad宇宙”中执行,可以这么说。让我感到困惑的是道格拉斯·克罗克福德(DouglasCrockford)的“单子(monad)和性腺”演讲。在他的实现中,bind直接返回转换函数的结果,而不检查结果本身是否是monad。这与Promises的then方法冲突,因为then总是返回一个

java - 在 Java 8 中实现 Monad

我正在尝试在thisarticle之后在Java8中实现一个Monad接口(interface)但是我有以下编译错误发现2个错误:File:FunctorsMonads.java[line:36]Error:FOptionalisnotabstractanddoesnotoverrideabstractmethodflatMap(java.util.function.Function>)inMonadFile:FunctorsMonads.java[line:50]Error:nameclash:flatMap(java.util.function.Function>)inFOptio

java - 什么是 Java 中的 monad 模拟?

我知道在Scala和许多其他函数式语言中有monads主要只是一个接口(interface)实现(例如在Scala中有flatMap[T]和unit[T]方法)是否有任何Java风格的接口(interface)可以是一个单子(monad)? 最佳答案 不,因为monad接口(interface)需要所谓的高级类型,这在Java中不存在。当然,您可以在Java中实现许多(不是全部)特定monad。 关于java-什么是Java中的monad模拟?,我们在StackOverflow上找到一个

java - 可选的 monad 和 Java 中的 Demeter 法则

当我审查一些代码时,我看到了这个片段。Listusers=/*Somecodethatinitializesthelist*/;users.stream().filter(user->user.getAddress().isPresent()).map(/*Somecode*/)//Andsoon...方法的调用user.getAddress()返回Optional.遵循著名的Demeter法则(LoD),上面的代码并不干净。但是,我不知道如何重构它以使其更清洁。第一次尝试可能是添加到User类方法hasAddress(),但这种方法克服了拥有Optional的需要,国际海事组织。我应

java - Monad 和装饰器模式

我是函数式编程的新手。在学习有关Monad的教程时,我开始将其视为OOP中装饰器模式的类比。我是正确的还是有任何与Monads非常相似的设计模式? 最佳答案 Monad绝对不是装饰器。没有一种常用的标准OOP模式可以直接类比monad。虽然您可以在OOP中很好地实现monad,但请参阅例如:http://logicaltypes.blogspot.sg/2011/09/monads-in-java.html我所知道的最好的基于Clojure的monad教程是BrianMarick的这个视频系列:https://vimeo.com/2

Eff Monad和Free Monad之间有所不同

Effmonad看起来比单子变形金刚更好,更可用,可以用MonadTransform代替锅炉,但是Freemonad结果,可以在执行和程序定义之间提供完全相同的事情,结果Effmonad看起来像是头顶。如果我错过了一些细微差别,请纠正我。看答案MonadTransformers是您每天要为您使用的程序,它让您map和flatMap上T在Task[Option[T]],例如。Free和Eff解决另一个问题:他们让你写作多个口译员对于您的程序(对于您的日常申请而言,这很可能是过分的)。它们都被用来构建单声道表达式。Eff让您“将解释的劳动”“分裂为多个解释者,而Free您通常会从他们的Free另一

c++ - 我如何从我的 maybe<> monad 中获取值(value)?

出于教育原因,我正在尝试在C++14中实现一个maybemonad。我(也许过于简单化)对monad的理解是,它们允许您将计算定义为一系列可组合的函数调用。维基百科关于monad的文章称它们为“可编程分号”,因为它们可以让您定义在一组谨慎的函数调用之间发生的事情。maybemonad是一个在发生故障时中断计算的monad。templatestructmaybe{maybe(constT&t):argument(t),valid(true){}maybe():argument(),valid(false){}Targument;boolvalid;};templatemaybejust(