Concurrent Clean: 局所関数定義
こういうのはありらしい。へー。
Start w # (f,w) = stdio w f = let foo True f # f = fwrites "Hello " f f = fwrites "World\n" f = f foo False f = f bar n f | n > 0 = fwrites "greater\n" f | n == 0 = fwrites "equal\n" f = fwrites "less\n" f in case f of f # f = foo False f f = bar -1 f f = fwrites "----\n" f = f (_,w) = fclose f w = w
同じことは、これでもよい。今回の目的には、こっちの方がよさそう。
ところで、withのインデントルールってちょっとよくわからないんだよなー。
Start w # (f,w) = stdio w f = case f of f # f = foo False f f = bar -1 f f = fwrites "----\n" f = f with foo True f # f = fwrites "Hello " f f = fwrites "World\n" f = f foo False f = f bar n f | n > 0 = fwrites "greater\n" f | n == 0 = fwrites "equal\n" f = fwrites "less\n" f (_,w) = fclose f w = w