F sharp - an overview

ChSantschi 614 views 25 slides Jun 03, 2015
Slide 1
Slide 1 of 25
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25

About This Presentation

Type providers: Why is F# appealing in finance. Simplicity for functional data.


Slide Content

F# 3.0:
Strongly Typed Programming
in the Information Rich World

Proposition 1
The world is incredibly
information-rich
Christoph Santschi – dipl. Natw. ETHZ

Proposition 2
Modern financial enterprises are
incredibly information-rich

Proposition 3
Our languages are information-
sparse

Proposition 4
This is a Problem
(especially for strongly typed Programming)

With F# we want to help fix this...
The mechanism we're adding
to F# is called Type Providers

LINQ + Type Providers
=
Language Integrated Data and
Services

F# is...
...a practical, supported, interoperable,
functional language that allows you to write
simple code to solve complex problems.

Crossing boundaries
“Fresh Code” Performance
Professional Development
Expressivity for Programming
Mathematical tasks
C++
C#
Java
Programming
F#
Python
...
Financial engineering
Algorithmic Trading
DSL programming
Math‐
...
ematica
QF modelling

Why is F# appealing in finance?
Functional programming fits with financial work
– Programmatic modelling
– Compositional parallel & GPU programming
– Domain specific languages – internal and external
– Efficient execution
Plays differently for different roles:
– Quants contribute to component development
– Architects explore hard problems fluently
– Developers tackle parallel and async programming

Simplicity: Functions as Values
abstract class
Command {
public virtual void Execute();
}
abstract class RoverCommand :
Command {
protected Rover Rover { get; private set;
public RoverCommand(MarsRover
rover) {
this.Rover = rover;
}
}
class BreakCommand :
RoverCommand {
public BreakCommand(Rover rover) : base(rover
{
}
public override void Execute()
{
Rover.Rotate(-5.ø);
}
}
class TurnLeftCommand :
RoverCommand {
}
type Command = Command of (Rover -> unit)
let BreakCommand =
Command(fun rover -> rover.Accelerate(-1.ø))
let TurnLeftCommand =
Command(fun rover -> rover.Rotate(-5.ø<degs>))
public TurnLeftCommand(Rover rover) : base(ro
{
}
public override void Execute()
{
Rover.Rotate(-5.ø);
}

Simplicity: Functional Data
Tuple<U,T> Swap<T,U>(Tuple<T,U>
t) {
return new Tuple<U,T>(t.Item2, t.Item1)
}
}
let reduce f (x, y, z)
= f x + f y + f z
return f(t.Item1) + f(t.Item2) + f (t.Item3);
C#
ReadOnlyCollection<Tuple<T,T,T>> Rotations<T>(Tuple<T,T,T> t)
{
new ReadOnlyCollection<int>
(new Tuple<T,T,T>[]
{ new Tuple<T,T,T>(t.Item1,t.Item2,t.Item3);
new Tuple<T,T,T>(t.Item3,t.Item1,t.Item2);
new Tuple<T,T,T>(t.Item2,t.Item3,t.Item1); });
let rotations (x, y,
z) = [ (x, y,
z); (z, x, y);
(y, z, x) ]
}
int Reduce<T>(Func<T,int> f,Tuple<T,T,T>
t) {
let swap (x, y) = (y, x)

Examples #2/#3: Finance
companies
Insurance Company Improves Time-to-
Market with Enhanced Rating Engine
Grange
OV er ;eW
Country or Region: United States
Industry: Financial services—Insurance
Customer Profile
Headquartered in Co I umb us, Ohio,
GrargeInsurance offers automobile,
home,and business insurance protection
to po I icyho Iders in 13 US. states.It em
ploys 1,500 people.
Business Situation
To maintain its compefitivestancling
and ifsreputationarnorg agents for
beim] easyto do business with, Orange
Insurance needed to keep its rating
erkgineworking attop performarKe.
Solulieff
Llsi ng M icrosoftle Visua I Stud 'Off Tea m
System and Visual F:rf, the company
Insurance
"With this streamlined development cycl
rapidly deliver more powerful solutionsl
they can deliver more choices and bette
policyholdersthat much faster."
GlennWaton, Associate Vice President, Personal Li nes, IT, Orange
For nearly 75 years, Grange Insurance has offer
products and services to policyholders in more
states. To maintain its well-earned reputation
company decided to enhance its rating engine-
for rating policies and performing what-if modi
analyses, and other vital activities. Working wit
Group and using the Microsoft! Visual Studio!
development environment and Microsoft ViSLIE
ming language, Grange Insurance parallelized i
husto men. Financial services firm
Country or Region: Europe Industry:
Financial services—Banking
Customer Profile
A la rge Europeanfinancial services firm
offers banking and asset-management
services to clients in 50 countries. In
2004, the bank earned morethan 11.5.$6
billion in income.
Software and Services
 MicrosoftVisual Studio
 M icro so f t Vi s ua l
 M icro so f tVisua l Studio 2010
 Technologies
 Microsoft .NET Framework
 Windows Presentation Foundation
Banking Firm Uses Functional Language to
Speed Development by 50 Percent
"VVe could not have developed 200 models in two
yearswithout F# and Visual Studio. lt would have
taken us at least twice as lang with our previaustools."
Directerata la rge Europeant na ncia I servicefirm
A large financial services firm in Europe sought new
development tools that could cut costs, boost productivity, and
improvethe quality of its mathematical models. To address its
needs, the bank deployed Microsoft F#, the Microsoft .NET
Framework, and Microsoft Visual Studio. It will sonn upgrade to
Visual Studio 2010 and the integrated Microsoft Visual F#. With
its new tools, the bank can speed development by 50 percent
or more, improve quality, and reduce costs.
Business Needs desktop and ona remotecluster of senyers

A Typeprovide is:
“A compile-time component
that provides a computed
space of types and methods
on-demand ...”
“A compiler plug-in...”
“An adaptor between
data/services and the .NET
type
system...”

// Freebase.fsx
// Example of reading from freebase.com in F#
// by Jomo Fisher
#r "System.Runtime.Serial
#r "System.ServiceModel.Wbl
#r "System.Web"
#r "System.Xml"
" et Query<'T>(query:string) : 'T =
let query = query.Replace("'","\"")
let queryUrl = sprintf "http://api.freebase.com/api/service/mqlread?query=%s"
"{\"query\":"+query+"}"
open System open
System.IO open
System.Netopen
System.Text open
System.Web
open System.Security.Authation let response =
request.GetResponse() open System.Runtime.Seria
let request : HttpWebRequest = downcast WebRequest.Create(queryUrl)
request.Method <- "GET"
request.ContentType <- "application/x-www-form-urncoded"
How would we do
this previously?
[<DataContract>]
type Result<'TResult> = {
[<field: DataMember(N
Code:string
[<field: DataMember(N re>
Result:'TResult
[<field: DataMember(Nmessage"let data =
Message:string
}
let result
= try
use reader = new StreamReader(response.GetResponseStream()) ]
reader.ReadToEnd();
finally
] sponse.Close()
] Encoding.Unicode.GetBytes(result);
let stream = new MemoryStream()
stream.Write(data, 0, data.Length);
stream.Position <- 0L
[<DataContract>]
type ChemicalElement = {
[<field: DataMember(Nname")let resu>
Name:string
[<field: DataMember(Ningpoint")raise (Invali >
let ser = Json.DataContractJsonSerializer(typeof<Result<'T>>)
] lt = ser.ReadObject(stream) :?> Result<'T>
if result.Code<>"/api/status/ok" then
] dOperationException(result.Message))
BoilingPoint:string else
[<field: DataMember(Nicmass")result.Result>]
AtomicMass:string
} let elements = Query<ChemicalElement
array>("[{'type':'/chemistry/chemical_element','name':null,'boiling_point':null,'atomic_mass
':null}]")
elements |> Array.iter(fun element->printfn "%A" element)

Note: F# itself still contains
no data
Open architecture
You can write your
own type
provider

Language Integrated
Data Market Directory

SQL

Web Services
type Data = WsdlService<u http://teny. xignite • c ornixF ut ures .asmx?WSDL"
let financials = DataiGetServiceContext()
financials.GetQuotes "IBM"
Fluent Typed
Access To
WSDL

F# 3.0: Queries
let avatarTitles =
query { for t in netflix.Titles do
where (t.Name.Contains "Avatar")
select t }
let avatarTitles =
query { for t in netflix.Titles do
where (t.Name.Contains "Avatar")
sortBy t.Name
select t }
let avatarTitles =
query { for t in netflix.Titles do
where (t.Name.Contains "Avatar")
sortBy t.Name
select t
take 100 }

Conclusion 1
Huge Information Spaces can be
Software Components

Conclusion 2
Multiple data standards with one
simple mechanism

Conclusion 3
Integrated Data Access Empowers
Both Programmers and Analysts

Summary
The financial world is massively
information rich
Our enterprise financial programming needs
to be information‐rich too
Information‐richness changes how we think
about programming and analysis