Using: http://fsprojects.github.io/Chessie/railway.html
https://www.slideshare.net/ScottWlaschin/railway-oriented-programming
This will allow only the highest level of coding to handle errors properly. (so errors aren't handled everywhere)
Most of this work will be dealing with discriminated unions: Success / Error, and bypasses
Outstanding Question:
- Should it be up to the package consumer to use railways / Result<Success, Failure> objects?