点读者monad scala

cou*_*ech 3 scala scalaz scalaz7

有没有办法,如何pointReader上下文中轻松获得价值?
我可以使用Readerobject并忽略上下文:

Reader {
  _ ? 3
}
Run Code Online (Sandbox Code Playgroud) Scalaz似乎有一种point具体的方法.我知道,这是定义的Applicative.我想,有一些技巧,如何将值放入Reader上下文中.

Tra*_*own 7

实际上有一个Applicative实例Reader,您可以像这样使用(您当然应该替换String为您希望环境的任何类型):

3.point[({type L[X] = Reader[String, X]})#L]
Run Code Online (Sandbox Code Playgroud)

如果您更愿意避免使用丑陋的lambda类型,并且不介意定义额外的类型别名,则可以编写以下代码:

type MyReader[X] = Reader[String, X]

3.point[MyReader]
Run Code Online (Sandbox Code Playgroud)

Scalaz 7还提供了一些简洁的速度,使其更加清晰:

3.liftReader[String]
Run Code Online (Sandbox Code Playgroud)

但是,这些或多或少都相互之间(和您的解决方案)相同.