File: Vector.fs

package info (click to toggle)
mono 6.12.0.199%2Bdfsg-6
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 1,296,836 kB
  • sloc: cs: 11,181,803; xml: 2,850,076; ansic: 699,709; cpp: 123,344; perl: 59,361; javascript: 30,841; asm: 21,853; makefile: 20,405; sh: 15,009; python: 4,839; pascal: 925; sql: 859; sed: 16; php: 1
file content (35 lines) | stat: -rw-r--r-- 908 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
module SomeNamespace.SomeModule

// This example is a basic class with (1) local let bindings, (2) properties, (3) methods, and (4) static members.
type Vector(x : float, y : float) =
    let mag = sqrt(x * x + y * y) // (1)
    member this.X = x // (2)
    member this.Y = y
    member this.Mag = mag
    member this.Scale(s) = // (3)
        Vector(x * s, y * s)
    static member (+) (a : Vector, b : Vector) = // (4)
        Vector(a.X + b.X, a.Y + b.Y)


// Declare IVector interface and implement it in Vector'.
type IVector =
    abstract Scale : float -> IVector

type Vector'''(x, y) =
    interface IVector with
        member __.Scale(s) =
            Vector'''(x * s, y * s) :> IVector
    member __.X = x
    member __.Y = y



type Vector2(x, y) =
    interface IVector with
        member __.Scale(s) =
            Vector2(x * s, y * s) :> IVector
    member __.X = x
    member __.Y = y