|
|
|
|
|
by foldr
1046 days ago
|
|
>But despite this, are you seriously claiming that sum types "do nothing" to achieve this null safety? No. I said nothing about null safety. What I said is that “sum types by themselves do nothing to force handling of errors”. In fact I imagine that’s one of the reasons that Haskell uses exceptions for error handling in the IO monad. If Haskell had a non-raising function like openFile :: FilePath -> IOMode -> IO (Either IOError Handle)
then you could of course attempt to open a file without checking for an error: main :: IO ()
main = do
openFile “/foo/bar” ReadMode
putStrLn “Did the file open successfully? No idea”
Sum types (by themselves) cannot be used to prove that all errors have been handled. In fact, formal proofs of this property using other type system features (such as linear types) are of fairly limited practical value, given that merely 'using' an error value in some type-theoretic sense doesn't necessarily entail actually taking appropriate action to handle it. |
|
Maybe (null) types are the simplest form of error type, with null pointer exceptions being the simplest from of unhandled error. They are therefore the easiest example to illustrate my point. You cannot simply choose to ignore them and remain credible. Haskell's broken old IO APIs are hardly a model example. Your Haskell code will at least give a compiler warning for ignoring the output. I would configure the compiler to turn this into an error.