Skip to content

Instantly share code, notes, and snippets.

@infosaurus
Created March 10, 2014 19:42
Show Gist options
  • Save infosaurus/9472721 to your computer and use it in GitHub Desktop.
Save infosaurus/9472721 to your computer and use it in GitHub Desktop.
F# resources snippet
module Resources
[<Measure>] type Or
[<Measure>] type Bois
[<Measure>] type Pierre
type Resources =
{ Or : int<Or>
Bois : int<Bois>
Pierre : int<Pierre> }
static member (+) (r1:Resources, r2:Resources) =
{ Or = r1.Or + r2.Or
Bois = r1.Bois + r2.Bois
Pierre = r1.Pierre + r2.Pierre }
static member (-) (r1:Resources, r2:Resources) =
{ Or =
match r1, r2 with
| _ when r1.Or - r2.Or < 0<Or> -> failwith "Resources can't have negative values"
| _ -> r1.Or - r2.Or
Bois =
match r1, r2 with
| _ when r1.Bois - r2.Bois < 0<Bois> -> failwith "Resources can't have negative values"
| _ -> r1.Bois - r2.Bois
Pierre =
match r1, r2 with
| _ when r1.Pierre - r2.Pierre < 0<Pierre> -> failwith "Resources can't have negative values"
| _ -> r1.Pierre - r2.Pierre
}
static member Zero =
{ Or = 0<Or>; Bois = 0<Bois>; Pierre = 0<Pierre>; }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment