Update samples. master
authorGreg Burri <greg.burri@gmail.com>
Sun, 23 Nov 2014 15:54:25 +0000 (16:54 +0100)
committerGreg Burri <greg.burri@gmail.com>
Sun, 23 Nov 2014 15:54:25 +0000 (16:54 +0100)
FSharpRef/Functional.fs
FSharpRef/Main.fs
FSharpRef/Object.fs

index 424dc35..a793722 100644 (file)
@@ -3,9 +3,6 @@
 open System.IO
 open System.Linq
 
-// For dynmic typing. To print anything in our case.
-let inline print a = printfn "%A" a
-
 // Write something on a file.
 let appendFile (filename: string) (text: string) = 
     use sw = new StreamWriter(filename, true)
@@ -59,10 +56,19 @@ let deckOfCards =
                 yield NumCard(n, suit)
     ]
 
-// Records.
-type Person = { First: string; Last: string; Age: int }
+// Records with custom equality.
+[<CustomEquality; NoComparison>]
+type Person = 
+    { First: string; Last: string; Age: int }
+    override this.Equals(other) =
+        match other with
+        | :? Person as p -> p.First = this.First && p.Last = this.Last
+        | _ -> false
+    override this.GetHashCode() =
+        this.First.GetHashCode() ^^^ this.Last.GetHashCode()
+
 let steve = { First = "Steve"; Last = "Holt"; Age = 17 }
-let steves'twin = { steve with First = "Paul" }
+let stevesTwin = { steve with First = "Paul" }
 
 // Queries. Should be used with SQL or other external data sources.
 let youngPersonNames persons =
index d070829..33fc574 100644 (file)
@@ -3,6 +3,9 @@
 open System.Linq
 open Functional
 
+// For dynamic typing. To print anything in our case.
+let inline print a = printfn "%A" a
+
 [<EntryPoint>]
 let main args = 
     appendFile "test.txt" "Pouet"
@@ -11,8 +14,9 @@ let main args =
     print (isEven (fac 4))
     //
     print steve.First
+    printfn "Person equality: %A" ({ First = "Steve"; Last = "Holt"; Age = 42 } = steve)
     printfn "Young persons: "
-    (youngPersonNames (Queryable.AsQueryable [steve ; steves'twin ; { First = "Paul"; Last = "Atreides"; Age = 11 }])) |> Seq.iter (fun name -> printfn "   name: %s" name)
+    (youngPersonNames (Queryable.AsQueryable [steve ; stevesTwin ; { First = "Paul"; Last = "Atreides"; Age = 11 }])) |> Seq.iter (fun name -> printfn "   name: %s" name)
     //
     print <| Seq.take 10 allPositiveInts
     print <| Seq.take 10 (fibs 1 1)
index c89cd72..3ba7bdc 100644 (file)
@@ -1,2 +1,3 @@
 module Object
 
+