Skip to content

Instantly share code, notes, and snippets.

@eiriktsarpalis
Last active August 29, 2015 14:14
Show Gist options
  • Select an option

  • Save eiriktsarpalis/087775afe656ad31c311 to your computer and use it in GitHub Desktop.

Select an option

Save eiriktsarpalis/087775afe656ad31c311 to your computer and use it in GitHub Desktop.
NewType in F#
// current type abbreviations in F#
type A = Guid
type B = Guid
let foo (x : A) = x.ToString()
let b = B.NewGuid()
foo(b) // type checks
// proposed newtype abbreviations
newtype A = Guid
newtype B = Guid
let foo (x : A) = x.ToString()
let b = B.NewGuid()
foo(b) // type error
// newtype abbreviations should generate explicit conversion methods
let g : Guid = B.ToGuid b
let b : B = B.FromGuid g
// alternative attribute-based approach
[<NewType>]
type A = Guid
[<NewType>]
type B = Guid
@eiriktsarpalis

Copy link
Copy Markdown
Author

In other words, the struct approach is probably the better way of solving this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment