Successfully reported this slideshow.
Your SlideShare is downloading. ×

[F#] Dev Life's Little Pleasures

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Fssf community overview
Fssf community overview
Loading in …3
×

Check these out next

1 of 25 Ad

More Related Content

Similar to [F#] Dev Life's Little Pleasures (20)

Recently uploaded (20)

Advertisement

[F#] Dev Life's Little Pleasures

  1. 1. [F#] DEV LIFE’S LITTLE PLEASURES Natallie Baikevich, F# enthusiast and financial dev @lu_a_jalla
  2. 2. WE ARE EVERYWHERE!
  3. 3. THINGS TO CARE ABOUT: • Correctness • Efficiency • Safety • Conciseness • Simplicity
  4. 4. Based on true stories WHEN YOU MEET THE REAL WORLD…
  5. 5. #1. THE SPREADSHEET How to gain by selling £17mln and buying $10mln? • Buy $10mln • Sell £16mln • Spot Rate = 1.6 • GBP/USD =1.5945 • RGL = 88000 Pretty nice, isn’t it?
  6. 6. #1. THE CODE let buyAmount, sellAmount = 10000000.0, 16000000.0 let spotRate = sellAmount / buyAmount // 1.6 let exchRate = 1.5945 let rgl amount spotRate exchRate = amount * (spotRate - exchRate) rgl sellAmount spotRate exchRate |> printfn "%A" // 88000.0
  7. 7. UNITS OF MEASURE [<Measure>] type USD [<Measure>] type GBP let buyAmount, sellAmount = 10000000.0<USD>, 16000000.0<GBP> let spotRate = sellAmount / buyAmount let exchRate = 1.5945<USD/GBP> let rgl amount spotRate exchRate = amount * (spotRate – exchRate)
  8. 8. UNITS OF MEASURE - FIXED [<Measure>] type USD [<Measure>] type GBP let buyAmount, sellAmount = 10000000.0<USD>, 16000000.0<GBP> let spotRate = buyAmount / sellAmount let exchRate = 1.5945<USD/GBP> let rgl amount spotRate exchRate = amount * (spotRate – exchRate) // -15512000.0
  9. 9. #2. THE OPPORTUNITIES The same trick works for yield quotes! Get a 100 times greater coupon. Or smaller. Whatever. • 1 = 100% • 1 % = 100 bp … Or add <pct> and <bp>.
  10. 10. The copy-paste is still around, so GO FOR GENERICS!
  11. 11. WHAT MAKES A PROGRAM WRITE ITSELF?
  12. 12. #3. THE BOILERPLATE DevExpress layouts: Save/Restore • DockManager: public void SaveLayoutToStream(Stream stream); public void RestoreLayoutFromStream(Stream stream); • Grid: public void SaveLayoutToStream(Stream stream); public void RestoreLayoutFromStream(Stream stream);
  13. 13. #4. LOADING STOCK DATA FROM YAHOO type Price = { “Oct 10, 2013“ Date: DateTime parse DateTime “33.31” parse float “33.38” parse float … Open: float … High: float Low: float Close: float Volume: float AdjClose: float option }
  14. 14. MEET GENERIC RESTRICTIONS let inline tryParse str = let mutable res = Unchecked.defaultof<_> let ok = (^a: (static member TryParse: string * byref< ^a > -> bool) (str, &res)) res match s.Split ',' with | [| date; o; h; l; c; v; adj |] -> Some { Date = tryParse date; Open = tryParse o; High = tryParse h; }
  15. 15. Good and Evil MUTABILITY / STATE / MORE
  16. 16. #6. JUST CHECKING UPDATES .NET List [ResizeArray] foreach(var update in updatesList) { doSomethingWith(update); } System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
  17. 17. WHEN CHOOSE WHAT Immutable Mutable • Safe • Simple to read • Performance optimizations (e.g. Dictionary vs Map) • Efficient data structures: • Interop • Check fsharpx • F# Core extensions (ExtCore)
  18. 18. HOW • let for values • types: tuples, records, DUs • core & community collections and data structures (list, map, set and more) Scala F# • val • let • var • let mutable
  19. 19. The billion dollar mistake and co MAKE ILLEGAL STATES UNREPRESENTABLE
  20. 20. (NULL) We have an Option to avoid nulls!
  21. 21. #8. SEND A MESSAGE match status with | Pending -> | Verified -> doSomething() Pattern matching & Discriminated Unions FTW! FS0025: Incomplete pattern matches on this expression. For example, the value '(_,Released)’ type Status = | Pending | Verified of User | Released of User * DateTime match msg with | text, Verified user ->
  22. 22. Summing up LET THE COMPILER HELP YOU!
  23. 23. WHAT’S NEXT? • The big ones: Type Providers • For those who is crazy about types: F* Getting Started: • The F# Software Foundation: http://fsharp.org/ • Try F# in your browser: http://www.tryfsharp.org/ • Snippets: http://www.fssnip.net/ • Join Twitter discussions: #fsharp
  24. 24. QUESTIONS?

×