scala - 点阅读器 monad scala

标签 scala scalaz scalaz7

有没有办法在 Reader 上下文中轻松地指向一个值?
我可以使用 Reader 对象并忽略上下文:

Reader {
  _ ⇒ 3
}
Scalaz 似乎有一个专门用于此目的的方法point。我明白了,这是在 Applicative 上定义的。我想,有一些技巧,如何将值放入 Reader 上下文中。

最佳答案

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

3.point[({type L[X] = Reader[String, X]})#L]

如果您希望避免丑陋的类型 lambda 并且不介意定义额外的类型别名,则可以编写以下内容:

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

3.point[MyReader]

Scalaz 7 还提供了一些很好的速记方式,使其更加清晰:

3.liftReader[String]

不过,这些或多或少彼此等效(以及您的解决方案)。

关于scala - 点阅读器 monad scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15836929/

相关文章:

json - 通过 Spark SQL 读取嵌套的 JSON - [AnalysisException] 无法解析列

list - 用语义上等效的猫功能替换 scalaz ListT

scala - 减少Scala中的选项?

scala - 将 'A => F[G[B]]' 转换为 'F[G[A=>B]' scala

scala - 具有无形状态单子(monad)的状态转换

scala - 在 Scalaz7 中管理导入

存在类型的 Scala 类型推断

scala - Spark 闭包参数绑定(bind)

python - 如何从 Spark SQL 查询 [PySpark] 获取表名?

list - Scala:从列表中提取重复值