IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

JavaでReaderモナドを理解してみる

Readerモナドdependency Injectionとして理解してみると良いかもしれません。

slides.com

Java開発で言えば、Web開発でよくDependency Injectionがでてきます。例えば、フレームワークにSpringをつかうと、こんな感じでしょうか。

package hello;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class GreetingController {

    @RequestMapping("/greeting")
    public String greeting(Model model) {
        ... modelをつかってなにかする
        return "greeting";
    }

}

これをhaskellっぽく描くとこんな感じになるのではないでしょうか?

greeting :: Reader Model String
greeting = do
    model <- ask
    ... modelをつかってなにかする 
    return "greeting"

runReader greeting model

正確さは欠けると思いますが、、。