I have revised the behavior of read[] in Decker to return nil if a user cancels the open file dialog instead of a hint-appropriate empty value. This makes it possible to distinguish explicit cancels from selecting and reading empty files, and makes it easier to use 'unless' to substitute in a default if needed:
https://github.com/JohnEarnest/Decker/commit/182398aed65b6ce900592137ebcba22a4c304b5e
In practice, I don't expect this to be a significant breaking change, since most of the examples in the wild that I have reviewed either explicitly check the size of the result (e.g. 'if count read[] ...'), gracefully tolerate a nil as an acceptable empty value (coercing it to a string, dict, etc), or make no attempt whatsoever to handle even an empty result.
Note that this change does not alter the existing behavior of 'danger.read[path hint]' or lilt's 'read[path hint]', which produce empty values upon a read failure, such as lacking filesystem permissions.