2013-04-05 3 views
3

есть способ, как легко point a значение в Reader контексте?
Я могу использовать объект 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] 

Все они более или менее эквивалентны друг другу (и вашему решению).

Смежные вопросы