Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ValueOption parity with options #703

Closed
5 tasks done
cartermp opened this issue Oct 9, 2018 · 4 comments
Closed
5 tasks done

ValueOption parity with options #703

cartermp opened this issue Oct 9, 2018 · 4 comments

Comments

@cartermp
Copy link
Member

cartermp commented Oct 9, 2018

Title of Suggestion

I propose we:

  • Add equivalent module-bound functions for ValueOption so that it has parity with regular options.
  • Add further properties to the ValueOption type to match what exists in Option
  • Add the same debugger display as options

The existing way of approaching this problem in F# is to write these functions and/or type extensions yourself.

Pros and Cons

The advantages of making this adjustment to F# are:

  • Makes ValueOption feel more first-class
  • Resolves an awkwardness where there is a lot more utility with the Option type than the ValueOption type

The disadvantages of making this adjustment to F# are:

  • It's more API surface area to build and test
  • If we ever add some way to write code that is generic over "option-shaped" types, we'll have needless code duplication

Extra information

Estimated cost (XS, S, M, L, XL, XXL): S

Related suggestion: #612

Affidavit (please submit!)

Please tick this by placing a cross in the box:

  • This is not a question (e.g. like one you might ask on stackoverflow) and I have searched stackoverflow for discussions of this issue
  • I have searched both open and closed suggestions on this site and believe this is not a duplicate
  • This is not something which has obviously "already been decided" in previous versions of F#. If you're questioning a fundamental design decision that has obviously already been taken (e.g. "Make F# untyped") then please don't submit it.

Please tick all that apply:

  • This is not a breaking change to the F# language design
  • I or my company would be willing to help implement and/or test this
@cartermp cartermp changed the title ValueOption module with functions offering parity with reference options ValueOption parity with options Oct 11, 2018
@cartermp
Copy link
Member Author

Approving as per "703 seems OK to do" from @dsyme in slack 🙂

@cartermp
Copy link
Member Author

cartermp commented Jan 21, 2019

Closing this out as it is committed and shipping: https://github.com/fsharp/fslang-design/blob/master/FSharp.Core-4.6.0/FS-1065-valueoption-parity.md

@Thorium
Copy link

Thorium commented Jun 24, 2022

What is the preferred way to map option to value-option? With lists there are Seq.toList and Map.ofArray etc but I can't see ValueOption.ofOption or Option.ToValueOption or anything like that.

Just match x with Some v -> ValueSome v | None -> ValueNone everywhere?

And different kind of tryFinds will be composed with >> function Some x -> ValueSome x | None -> ValueNone ?

@brianrourkeboll
Copy link

I'll just note here for posterity that #703 (comment) was addressed via an addendum to the RFC for this feature in fsharp/fslang-design#779, implemented in dotnet/fsharp#17436.

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

No branches or pull requests

3 participants