Concurrent Clean : 大域脱出2
tryという関数を作ってみた。
::Try a b = Break a | Continue b try f g x :== case f x of Break a = a Continue b = g b Start w = w --> stdio --> \(f,w) = ([],f,w) --> try check \(f,w) = f --> fwrites "hello world" --> flip fclose w --> \(ok,w) = if ok w (trace "error on close file" w) where check (ls,f,w) = case ls of [] = Break (snd $ fclose f w) _ = Continue (f,w)
一般的な名前を使ってしまうと、後で困ることがあるかもしれないけど・・・