2013-04-05 82 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] 

儘管如此,它們或多或少都相互等價(相互之間)。