Cleaning.
[master-thesis.git] / Parasitemia / ParasitemiaCore / Types.fs
index 917e7d8..946c2c7 100644 (file)
@@ -35,7 +35,7 @@ type Ellipse (cx: float32, cy: float32, a: float32, b: float32, alpha: float32)
         this.CutAVericalLine 0.f || this.CutAVericalLine width ||
         this.CutAnHorizontalLine 0.f || this.CutAnHorizontalLine height
 
-    member this.Scale (factor: float32) =
+    member this.Scale (factor: float32) : Ellipse =
         Ellipse(this.Cx, this.Cy, this.A * factor, this.B * factor, alpha)
 
     // Approximation of Ramanujan.
@@ -59,4 +59,31 @@ type Line (a: float32, b: float32) =
     member this.A = a
     member this.B = b
 
+type MaybeBuilder () =
+    member this.Bind (x, f) =
+        match x with
+        | None -> None
+        | Some a -> f a
 
+    member this.ReturnFrom (x) = x
+
+    member this.TryFinally (body, compensation) =
+        try
+            this.ReturnFrom(body())
+        finally
+            compensation()
+
+    member this.Using (disposable: 'a when 'a :> IDisposable, body) =
+        let body' = fun () -> body disposable
+        this.TryFinally(body', fun () ->
+            match disposable with
+            | null -> ()
+            | disp -> disp.Dispose())
+
+    member this.Zero () =
+        None
+
+    member this.Return (x) =
+        Some x
+
+let maybe = MaybeBuilder()
\ No newline at end of file