点读者monad scala

时间:2013-04-05 14:46:56

标签: scala scalaz scalaz7

有没有办法,如何在point上下文中轻松Reader值? 我可以使用Reader对象并忽略上下文:

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

1 个答案:

答案 0 :(得分:7)

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

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

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

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

3.point[MyReader]

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

3.liftReader[String]

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