純粋関数型言語のfoldlで副作用を起こす
http://d.hatena.ne.jp/i_k_b/20120215/1329320486に触発されてCleanでも書いてみました。
module foldout import StdEnv // 出力する関数 (Fileは一意でなければならない) // class (<<<) infixl a :: !*File !a -> *File msg :== ["hello,", " uniqueness", " typing!", "\n"] Start w # (cout, w) = stdio w cout = foldl (<<<) cout msg // side effect caused by foldl ! /* cout = cout <<< "hello," cout = cout <<< "uniqueness typing!" */ (ok,w) = fclose cout w = w
実行結果
hello, uniqueness typing!
普通のfoldlに副作用を起こす関数(<<<)を渡せていますね。