Skip to content

Instantly share code, notes, and snippets.

@bryanhunter
Created November 12, 2017 00:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bryanhunter/41d5c46464320e15f5812fda9ee4e11f to your computer and use it in GitHub Desktop.
Save bryanhunter/41d5c46464320e15f5812fda9ee4e11f to your computer and use it in GitHub Desktop.
Union type with units of measure
module UnitsOfMeasure
[<Measure>] type cm
[<Measure>] type inch
type Shape<[<Measure>]'u> =
| Circle of float<'u>
| Square of float<'u>
| Triangle of float<'u> * float<'u>
| Rectangle of float<'u> * float<'u>
let GetArea shape =
match shape with
| Circle(radius) -> 3.14 * radius * radius
| Square(width) -> width * width
| Triangle(``base``, height) -> ``base`` * height / 2.0
| Rectangle(width, height) -> width * height
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment