2013-04-05 60 views
3

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

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

回答

7

其实也有一个Applicative实例Reader,您可以使用像这样(你当然应该与任何类型的你希望你的环境中代替String):

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

如果你喜欢避免难看的类型拉姆达并且不介意定义额外的类型别名,你可以写,而不是执行以下操作:

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

3.point[MyReader] 

Scalaz 7还提供速记不错位,使得这更清洁:

3.liftReader[String] 

尽管如此,它们或多或少都相互等价(相互之间)。