Concurrent Clean : for-notation : 脱出パターン

次のようなプログラムを

proc f = for f
           ?1 True,i <- freadi
           fwritei i
           return Just i
         except1 _ _
           return Nothing

次のように変換する。

proc f = case f of
           for = case freadi for of
                   (True,i,for) # for = fwritei i for
                                = (Just i,for)
                   (for`0,for`1,for) = except1 for`0 for`1 for
           with
             except1 _ _ for
               = (Nothing, for)