3 ms·
You can implement "finally" as a higher order function in Haskell: finally :: Either err a -> IO () -> (a -> IO (Either err b)) -> IO (Either err b) finall
by batterseapower 15y ago
You can implement "finally" as a higher order function in Haskell:
finally :: Either err a -> IO () -> (a -> IO (Either err b)) -> IO (Either err b)
finally (Left err) cleanup _k = cleanup >> return (Left err)
finally (Right x) _cleanup k = k x
You avoid having to unwind the stack because the user of finally has to manually convert into CPS in order to supply the higher order argument of type "a -> IO (Either err b)"