草庐IT

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 - 功能java : what's this P1 thing?

我正在研究FunctionalJava,但我不明白P1是什么意思是。谁能解释和/或举个例子?(背景:我知道柯里化(Currying)和闭包是什么) 最佳答案 这直接取自FunctionalJava的GoogleCode项目:Jointuniontypes(tuples)areproductsofothertypes.Productsofarities1-8areprovided(fj.P1-fj.P8).Theseareusefulforwhenyouwanttoreturnmorethanonevaluefromafunction

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

java - 这个 Haskell 函数的 Java 等价物是什么?

PhilipWadler的论文“Monadsforfunctionalprogramming”有一个函数eval的例子,它执行用Haskell编写的除法。这是改编自GrahamHutton的“ProgramminginHaskell”:dataExpr=ValInt|DivExprExpreval::Expr->Inteval(Valn)=neval(Divxy)=evalx`div`evaly我的Java等价物是:abstractclassIntegerExpression{abstractIntegerevaluate();}classValueextendsIntegerExpr

java - Java 8 中 Optional 类型的有效使用

这是Java8中Optional类型的有效(预期)用法吗?Stringprocess(Strings){returnOptional.ofNullable(s).orElseGet(this::getDefault);} 最佳答案 我会再试一次。这是一个有效的用法吗?是的,从狭义上讲,它编译并产生您期望的结果。这是预期用途吗?不,现在,有时事情会发现它们的用处超出了它们最初的用途,如果成功了,那就太好了。但是对于Optional,我们发现通常事情不会很顺利。BrianGoetz我在我们的JavaOne2015演讲APIDesignW

java - 如何在获得可比性能的同时在 Java8 中进行 monadicaly 编程?

Java8中的monadic编程是否更慢?下面是我的测试(使用右偏Either为每个计算创建新实例)。命令式版本快1000倍。如何在获得可比性能的同时在Java8中进行monadicaly编程?主.javapublicclassMain{publicstaticvoidmain(Stringargs[]){Mainm=newMain();m.work();m.work2();}publicvoidwork(){finallongstart=System.nanoTime();finalEitherresult=Try(this::getInput).flatMap((s)->Try(t

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(

C++ 单子(monad)库

有谁知道C++中的一个好的monad模板库。也许,它提供了一些您会在Haskell中看到的常见单子(monad),例如Maybe。 最佳答案 类似Maybe的东西可以在Boost.Optional中找到. 关于C++单子(monad)库,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5448162/