![Page 1: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/1.jpg)
Introduction to Railway Oriented Programming
Ed Courtenay@edcourtenay
![Page 2: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/2.jpg)
Ed Courtenay
Senior Engineer, Application Reliability Team
![Page 3: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/3.jpg)
![Page 4: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/4.jpg)
![Page 5: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/5.jpg)
Inspiration for this
talk
• Scott Wlaschin
• F# for Fun and Profit -https://fsharpforfunandprofit.com/rop
![Page 6: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/6.jpg)
Agenda
• So what are we talking about?
• F# demos
• How can these principles be applied to non-functional languages?
• C# demo
![Page 7: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/7.jpg)
Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live.
http://wiki.c2.com/?CodeForTheMaintainer
![Page 8: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/8.jpg)
What is Railway Oriented Programming?• A functional approach to error handling
• A technique for creating pipelines
• Push error handling to where it belongs
• Control flow over exceptions
![Page 9: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/9.jpg)
![Page 10: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/10.jpg)
![Page 11: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/11.jpg)
Func<Doctor, Doctor>
Regenerate
![Page 12: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/12.jpg)
![Page 13: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/13.jpg)
F# Demo
![Page 14: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/14.jpg)
'TInput Happy Path
'TOutput
Single Track Function
![Page 15: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/15.jpg)
'TA 'TB 'TC 'TD
![Page 16: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/16.jpg)
'TInput Happy Path
Sad Path
Result<'TSuccess, 'TFailure>
Switch Function
![Page 17: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/17.jpg)
![Page 18: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/18.jpg)
('a -> Result<'b, 'c>) -> Result<'a, 'b> -> Result<'b, 'c>
switchFunction twoTrackInput output
![Page 19: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/19.jpg)
MapR
esu
lt<T
A, T
C>
Resu
lt<TA, TC
>
Success path
Failure path
TA TB
TC TC
![Page 20: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/20.jpg)
MapR
esu
lt<l
on
g, s
trin
g>R
esult<
DateTim
e, strin
g>
Success path
Failure path
long DateTime
string string
![Page 21: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/21.jpg)
Bind
Success path
Failure path
TA TB
TC TC
![Page 22: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/22.jpg)
![Page 23: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/23.jpg)
C# Demo
![Page 24: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/24.jpg)
Code for this talk
• https://github.com/ecourtenay/ROP
![Page 25: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/25.jpg)
![Page 26: Introduction to Railway Oriented Programming...Introduction to Railway Oriented Programming Ed Courtenay @edcourtenay Ed Courtenay Senior Engineer, Application Reliability Team Inspiration](https://reader035.vdocument.in/reader035/viewer/2022062604/5fb52772b5c38f1c2f5a57e1/html5/thumbnails/26.jpg)
Any Questions?