open System [] type deg [] type rad [] type km let haversine (θ: float) = 0.5 * (1.0 - Math.Cos(θ/1.0)) let radPerDeg = (Math.PI / 180.0) * 1.0 type pos(latitude: float, longitude: float) = member this.φ = latitude * radPerDeg member this.ψ = longitude * radPerDeg let rEarth = 6372.8 let hsDist (p1: pos) (p2: pos) = 2.0 * rEarth * Math.Asin(Math.Sqrt(haversine(p2.φ - p1.φ)+ Math.Cos(p1.φ/1.0)*Math.Cos(p2.φ/1.0)*haversine(p2.ψ - p1.ψ))) [] let main argv = printfn "%A" (hsDist (pos(36.12, -86.67)) (pos(33.94, -118.40))) 0