[F#] DEV LIFE’S LITTLE PLEASURES
Natallie Baikevich,
F# enthusiast and financial dev
@lu_a_jalla
WE ARE EVERYWHERE!
THINGS TO CARE ABOUT:

• Correctness

• Efficiency
• Safety

• Conciseness
• Simplicity
Based on true stories

WHEN YOU MEET THE REAL WORLD…
#1. THE SPREADSHEET
How to gain by selling £17mln and buying $10mln?
• Buy $10mln
• Sell £16mln

• Spot Rate = 1.6
• GBP/U...
#1. THE CODE
let buyAmount, sellAmount = 10000000.0, 16000000.0
let spotRate = sellAmount / buyAmount // 1.6
let exchRate ...
UNITS OF MEASURE
[<Measure>] type USD
[<Measure>] type GBP

let buyAmount, sellAmount = 10000000.0<USD>, 16000000.0<GBP>

...
UNITS OF MEASURE - FIXED
[<Measure>] type USD
[<Measure>] type GBP

let buyAmount, sellAmount = 10000000.0<USD>, 16000000....
#2. THE OPPORTUNITIES
The same trick works for yield quotes! Get a 100 times
greater coupon. Or smaller. Whatever.
• 1 = 1...
The copy-paste is still around, so

GO FOR GENERICS!
WHAT MAKES A PROGRAM WRITE ITSELF?
#3. THE BOILERPLATE
DevExpress layouts: Save/Restore
• DockManager:
public void SaveLayoutToStream(Stream stream);
public ...
#4. LOADING STOCK DATA FROM YAHOO
type Price = {

“Oct 10, 2013“

Date: DateTime

parse DateTime

“33.31”

parse float

“3...
MEET GENERIC RESTRICTIONS
let inline tryParse str =
let mutable res = Unchecked.defaultof<_>
let ok = (^a: (static member ...
Good and Evil

MUTABILITY / STATE / MORE
#6. JUST CHECKING UPDATES
.NET List [ResizeArray]
foreach(var update in updatesList)
{
doSomethingWith(update);
}

System....
WHEN CHOOSE WHAT
Immutable

Mutable

• Safe
• Simple to read

• Performance optimizations
(e.g. Dictionary vs Map)

• Effi...
HOW
• let for values
• types: tuples, records, DUs
• core & community collections and data structures (list, map, set
and ...
The billion dollar mistake and co

MAKE ILLEGAL STATES UNREPRESENTABLE
(NULL)

We have an Option to avoid nulls!
#8. SEND A MESSAGE
match status with
| Pending ->
| Verified -> doSomething()

Pattern matching &
Discriminated Unions FTW...
Summing up

LET THE COMPILER HELP YOU!
WHAT’S NEXT?
• The big ones: Type Providers

• For those who is crazy about types: F*
Getting Started:

• The F# Software ...
QUESTIONS?
[F#] Dev Life's Little Pleasures
Upcoming SlideShare
Loading in …5
×

[F#] Dev Life's Little Pleasures

3,786 views

Published on

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,786
On SlideShare
0
From Embeds
0
Number of Embeds
2,094
Actions
Shares
0
Downloads
6
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

[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?

×