小编jor*_*an3的帖子

作家Monad是否与State Monad有效?

有一个伟大的教程在这里,这似乎暗示,我认为作家单子基本上是做代表的工作的特殊情况,元组对象(A,B).作者在左边积累了值(即A),并且A与它有相应的Monoid(因此它可以累积或改变状态).如果A是一个集合,那么它就会累积.

State Monad也是一个处理内部元组的对象.它们都可以是flatMap'd,map'd等等.这些操作对我来说都是一样的.他们有什么不同?(请用scala示例回复,我不熟悉Haskel).谢谢!

monads scala state-monad scalaz writer-monad

19
推荐指数
1
解决办法
1649
查看次数

如何在Java8中编程monadicaly同时获得可比性能?

Java 8中的monadic编程是否更慢?下面是我的测试(使用右偏置的Either为每次计算创建新实例).命令式版本快1000倍.如何在Java8中编程monadicaly同时获得可比性能?

Main.java

public class Main {

    public static void main(String args[]){
        Main m = new Main();
        m.work();
        m.work2();
    }


    public void work(){
        final long start = System.nanoTime();
        final Either<Throwable,Integer> result =
                Try(this::getInput).flatMap((s) ->
                Try(this::getInput).flatMap((s2) ->
                parseInt(s).flatMap((i) ->
                parseInt(s2).map((i2) ->
                i + i2
                ))));
        final long end = System.nanoTime();
        result.map(this::println).leftMap(this::println);
        System.out.println((end-start)/1000+"us to execute");
    }

    public void work2(){
        Object result;
        final long start = System.nanoTime();
        try {
            final String s = getInput();
            final String s2 = getInput();

            final int i = …
Run Code Online (Sandbox Code Playgroud)

java monads performance either java-8

10
推荐指数
1
解决办法
242
查看次数

为什么无形的_0 Nat是一个类而不是一个对象?

我想了解Shapeless,我遇到了这个:

// Base trait for type level natural numbers.
trait Nat {
  type N <: Nat
}

// Encoding of successor.
case class Succ[P <: Nat]() extends Nat {
  type N = Succ[P]
}

// Encoding of zero.
class _0 extends Nat {
  type N = _0
}
Run Code Online (Sandbox Code Playgroud)

_0是一个特殊而独特的案例,就像Nil一个List._0没有前任.为什么它不是一个对象/案例对象(单例)? HList似乎这样做:

// `HList` ADT base trait.
sealed trait HList

// Non-empty `HList` element type.
final case class ::[+H, +T <: HList](head : H, …
Run Code Online (Sandbox Code Playgroud)

functional-programming scala hlist shapeless

7
推荐指数
1
解决办法
285
查看次数

如何正确比较Slick中的选项成员?

我正在使用地址做事,而成员子预设(公寓/公寓#)导致检索错过.我也担心subpremise是我唯一索引约束的一部分,因为它可以为null.

故障过滤器:

tableQuery.filter(c=> (c.longitude === r.longitude && c.latitude === r.latitude) ||
        (c.streetNumber === r.streetNumber && c.route === r.route && c.subpremise === r.subpremise && c.neighborhoodId === r.neighborhoodId))
Run Code Online (Sandbox Code Playgroud)

成功过滤:(通过removung subpremise)

tableQuery.filter(c=> (c.longitude === r.longitude && c.latitude === r.latitude) ||
            (c.streetNumber === r.streetNumber && c.route === r.route && c.neighborhoodId === r.neighborhoodId)) 
Run Code Online (Sandbox Code Playgroud)

如果还有其他一些我错过的因素,我已经将这些定义包括在下面了,希望它会被注意到.

case class Address(id:Option[Long],streetNumber:Short,route:String,subpremise:Option[String],neighborhoodId:Fk,latitude:Option[Double],longitude:Option[Double])

class Addresses(tag: Tag) extends Table[Address](tag, "addresses") with Logging {
  def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
  def streetNumber = column[Short]("street_number")
  def route = column[String]("route",O.NotNull)
  def subpremise = …
Run Code Online (Sandbox Code Playgroud)

database-design scala optional database-schema slick-2.0

7
推荐指数
1
解决办法
1575
查看次数

当Disjunction是最外面的容器时,如何使用Monad Transformer?

val vLInts = (1 to 10).toList.right[String]

for {
  i <- ListT(vLints)
  _ = println(i)
} yield i

//error: no type parameters for method apply:(underlying: M[List[A]])scalaz.ListT[M,A] in object ListT exist so that it can be applied to arguments (scalaz.\/[String,List[Int]])
Run Code Online (Sandbox Code Playgroud)

这里的问题是析取\/[A, B]有2个泛型,因此不是Monad.当我做一个类型别名

type Attempt[A] = \/[String, A]
Run Code Online (Sandbox Code Playgroud)

它成功了,因为我把左侧固定,我现在有Monad.如果最外面的类型是Disjunction,如何不使用类型别名,我怎样才能让我的Monad Transformer工作?

monads scala monad-transformers scalaz7

5
推荐指数
1
解决办法
224
查看次数

Java 8 Gead of Generic for Monad Transformer

我正在使用"完全懒惰",我渴望Either<String,Option<A>>在我正在编写的程序中.这是一个使用Monad Transformer for Option的好地方(类似于Scalaz 7中存在的那个很棒).我似乎无法在Java 8中使用Generics.下面的代码是我喜欢它的样子(一开始).任何关于如何让它工作/编译的建议都是惊人的!!! 请帮我把这个Monad Transformer存在为我的Java 8代码.

import com.googlecode.totallylazy.Monad;
import com.googlecode.totallylazy.Option;
import com.googlecode.totallylazy.functions.Function1;
import static com.google.common.base.Preconditions.checkNotNull;

public class OptionT<M extends Monad,A> {
   final M<Option<A>> run;

   public OptionT(final M<Option<A>> run){
       this.run = checkNotNull(run);
   }

   public <B> OptionT<M,B> map(Function1<A,B> f){
       return new OptionT<M,B>(run.map(o-> o.map(f)));
   }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我得到以下编译器失败:

OptionT.java:15: error: unexpected type
    final M<A> run;
          ^
  required: class
  found:    type parameter M
  where M is a type-variable:
    M extends Monad<Option<?>> declared in class OptionT
OptionT.java:17: error: unexpected type …
Run Code Online (Sandbox Code Playgroud)

java generics functional-programming monad-transformers java-8

5
推荐指数
1
解决办法
884
查看次数

何时以及为何使用 State Monad?

我可以编写一个 State Monad(在 Scala/Java 中),并且当我看到其他人使用它时,我几乎可以遵循逻辑。我不完全理解它正在解决的问题。它是一个包裹 funciton 的 monad S => (S,A)

因此,当您通过 flatMap 嵌套导致 State Monad 的函数时,它会为您提供一组对数据执行的指令/操作(S)(但尚未执行它们)。直到最后,当你给它一个S并告诉它运行时,它才起作用。

与仅编写函数来完成相同的事情相比,这样做有什么好处?

Monad 不会组合,因此以这种方式拥有这些功能似乎对设计有很大的影响。如果您提供示例代码,请使用 Java 或 Scala(因为我不明白如何阅读 Haskell 或其他严格的函数式语言)。汉克斯!

scala state-monad

5
推荐指数
1
解决办法
457
查看次数

Java 8如何在没有Lambdas的情况下编写函数?

我只看过如下组合函数(或使用lambdas的人)的例子.

Function<A,B> inner = ....;
Function<B,C> outter = ....;
Function<A,C> result = outter.compose(inner);
Run Code Online (Sandbox Code Playgroud)

我想使用"compose"功能编写以下函数,而不是直接调用它们.

public class J{ 
  public static B inner(final A a){...}
  public static C outter(final B b){...}      
}
public class K{
  public static Function<A,C> result = (J::outter).compose(J::inner);
}
Run Code Online (Sandbox Code Playgroud)

这不编译.我似乎无法使用java.util.function.Function的"compose"成员.我如何为传统声明的函数执行此操作?我想避免以下情况:

public class K{
  public static Function<A,C> result = (a)-> J.outter(J.inner(a));
}
Run Code Online (Sandbox Code Playgroud)

可以吗?提前致谢

java lambda function function-composition

4
推荐指数
1
解决办法
152
查看次数