Skip to content

Instantly share code, notes, and snippets.

@andybrackley
Created May 19, 2016 19:26
Show Gist options
  • Save andybrackley/5b35cfd2dfd98a5dabe5858bb5dd0f97 to your computer and use it in GitHub Desktop.
Save andybrackley/5b35cfd2dfd98a5dabe5858bb5dd0f97 to your computer and use it in GitHub Desktop.
Elm version of my F# race paces calculations
import Html exposing (text)
import Time exposing (Time)
type UnitType = Metric | Imperial
type Speed = Mph Float | Kph Float
type Pace = MinPerMile Float | MinPerKm Float
type Distance = Miles Float | Kms Float
speedConversionFactor = 0.621371192
convertMphToKph : Float -> Float
convertMphToKph mph =
mph / speedConversionFactor
convertKphToMph : Float -> Float
convertKphToMph kph =
kph * speedConversionFactor
paceFromSpeed : UnitType -> Speed -> Pace
paceFromSpeed requiredType speed =
let
asPace spd = 60.0 / spd
in
case speed of
Mph mph ->
case requiredType of
Metric -> MinPerKm ( asPace mph |> convertMphToKph )
Imperial -> MinPerMile ( asPace mph )
Kph kmh ->
case requiredType of
Metric -> MinPerKm ( asPace kmh )
Imperial -> MinPerMile ( asPace kmh |> convertKphToMph )
convertSpeed : UnitType -> Speed -> Speed
convertSpeed requiredType speed =
case speed of
Mph mph ->
case requiredType of
Metric -> Kph (convertMphToKph mph)
Imperial -> speed
Kph kph ->
case requiredType of
Metric -> speed
Imperial -> Mph (convertKphToMph kph)
calcSpeedFromTimeAndDistance : Time -> Distance -> UnitType -> Speed
calcSpeedFromTimeAndDistance time distance requiredType =
let
speed dist = dist / (time |> Time.inHours)
in
case distance of
Miles miles -> Mph (speed miles) |> convertSpeed requiredType
Kms kms -> Kph (speed kms) |> convertSpeed requiredType
calcPaceFromTimeAndDistance : Time -> Distance -> UnitType -> Pace
calcPaceFromTimeAndDistance time distance requiredType =
calcSpeedFromTimeAndDistance time distance requiredType |> paceFromSpeed requiredType
main =
let
requiredTimeMins = 1 * Time.minute
distance = Kms 0.4
speedCalc = calcPaceFromTimeAndDistance requiredTimeMins distance
test = Mph (12) |> convertSpeed Metric
in
text (toString (speedCalc Metric))
-- text ( toString test )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment