Monad by Scheme
(define (Monad val) (cons val ())) ; モナドを作成 (define (Return monad) (car val)) ; モナドから値を取り出す (define (>>= monad func) (let* ((val (Return monad))) ; モナドの値を取り出す (func monad))) ; 取り出した値にfunc適応(funcはモナドを返す) (define (sample-func val) (let ((fugahoge val)) ; 値に何らかの処理を加える (Monad let))) ; モナドにして返す
コンテナのアナロジーをより分かり易くする為にconsを使ってみた。モナド演算子を使って、(>>= (>>= (>>= (Monad initialData) func1) func2) func3)の様にする事で計算の流れを作り出せる。ただ、Lispだとあんまし視覚的じゃないなぁ。やっぱりHaskellみたく、(Monad initialData) >>= func1 >>= func2 >>= func3と書けると、計算の流れを作り出しているかのようである。