User Tools

Site Tools


projects:fsharp_workshop

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
projects:fsharp_workshop [2015/04/17 21:35] mkuciaprojects:fsharp_workshop [2015/04/18 17:32] mkucia
Line 1: Line 1:
 ====== F# workshop ====== ====== F# workshop ======
 +{{:projects:fsharp_logo.png?nolink|}}
 +===== Prerequisites =====
 +    * https://www.linqpad.net/ or anything that can execute a REPL((Read, Evaluate, Print Loop))
 +<hidden ↘ alternatives>
 +    * Try F# in browser: http://www.tryfsharp.org/Create
 +    * Use Visual Studio https://www.visualstudio.com/
 +    * Get a full distribution: http://fsharp.org/use/windows/ OR http://fsharp.org/use/linux/
 +</hidden>
  
 +===== Agenda =====
  
-  * f(x) = Hello_Word+  * hello(x)
   * Type providers (strongly typed)   * Type providers (strongly typed)
   * Matching   * Matching
   * Options   * Options
  
-===== How to use? Where to get? ===== 
-Try F# in browser: 
-http://www.tryfsharp.org/Create 
  
-Want to get a full distribution?  +===== hello(x) =====
-http://fsharp.org/ → Use F# +
- +
-===== [Hello] =====+
 <code fsharp> <code fsharp>
 let hello = printf "Hello World" let hello = printf "Hello World"
 +hello
 </code> </code>
  
-===== Why? ===== +F# (pronounced “F Sharp”) is 
- +
- +
  
 <WRAP group> <WRAP group>
 <WRAP half column box> <WRAP half column box>
-Pros: 
   * Open Source   * Open Source
-  * Multi platform (Mono, .NET core)+  * Multi platform
   * Modern, rising popularity   * Modern, rising popularity
-  * Lazy evaluation+  * Lazy evaluated
   * Reusable   * Reusable
-  * Reduced code+  * Concise (See [[http://theburningmonk.com/2014/12/seven-ineffective-coding-habits-many-f-programmers-dont-have/|signal-to-noise ratio]])
   * Strongly typed   * Strongly typed
 +  * Functional first
 +    * Use functional to write easy to test and understand code
 +    * Use imperative for performance and compatibility
 +    * Use objective for organization and encapsulation
 +  * Compiled
 </WRAP> </WRAP>
  
 <WRAP half column box> <WRAP half column box>
-Cons: 
   * Not suitable for real time (unpredictable performance)   * Not suitable for real time (unpredictable performance)
-  * Different thinking process (you need to re-learn)+  * Hard to optimize (Functional languages fundamentally don't model how your computer works) 
 +  * Functional first (different thinking processyou will need to re-learn)
 </WRAP> </WRAP>
 </WRAP> </WRAP>
 +programming language for writing simple code to solve complex problems. 
 +
 +<code fsharp>
 +let hello x = printfn "Hello %s" x
 +hello "world"
 +</code>
 +
 +Introducing pipeline operator:
 +<code fsharp>
 +let hello x = printfn "Hello %s" x
 +"World" |> hello
 +</code>
 +
 +<hidden pipeline operator definition>
 +How to define the operator? 
 +<code fsharp>
 +let inline (|>) x f = f x
 +</code>
 +</hidden>
 +
 +<code fsharp>
 +let square x = x * x
 +let subtract x y = x - y
 +</code>
 +
 +<code fsharp>
 +let ``complicated stuff`` x =
 +    printfn "%d" (add 5 (square x))
 +</code>
 +
 +<code fsharp>
 +let ``another complicated stuff`` x =
 +    x |> square |> subtract 5 |> printfn "%d"
 +</code>
 +
 +<code fsharp>
 +let equation x =
 +
 + |> (fun y -> y * y ) 
 + |> (fun y z -> y - z ) 5
 + |> printfn "%d"
 +</code>
  
-<hidden ↘ Cequivalent>Since you want to know more, here is an explanation with more details […]</hidden>+Note that Fuses indentation to indicate block structure. Find out more [[http://fsharpforfunandprofit.com/posts/fsharp-syntax/|here]].
  
-===== Pitfalls and drawbacks ===== 
-Functional languages fundamentally don't model how your computer works. 
-Harder to optimize. 
  
 ===== References ===== ===== References =====
projects/fsharp_workshop.txt · Last modified: 2015/05/02 12:45 by mkucia