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

Allow tupled returns and outrefs in functions outputs #787

Open
alexandrehtrb opened this issue Sep 23, 2019 · 1 comment

Comments

@alexandrehtrb
Copy link

commented Sep 23, 2019

Tupled returns and outrefs in functions outputs

I propose we allow outrefs in function parameters to be outputted with return statements in tupled form, as it already works with methods.

Example that it works, with methods:

type ClassA() =
    member this.CountAs(s: string, found: outref<bool>): int =
        let num = s.Count(Func<char, bool>((=) 'a'))
        found <- num > 0
        num

let numAs, found = ClassA().CountAs("abcde")

Example that does not work, with functions:

let countAs(s: string, found: outref<bool>): int =
    let num = s.Count(Func<char, bool>((=) 'a'))
    found <- num > 0
    num

let numAs, found = countAs("abcde")

Pros and Cons

The advantage of making this adjustment to F# is more predictability in using tupled outputs with returns and outrefs, because I do not see a reason for this currently only be available for methods, and not functions.

Extra information

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

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

This comment has been minimized.

Copy link
Member

commented Sep 23, 2019

I wouldn't say I'm against this in principle, though the current behavior with methods is rooted in interop with a .NET pattern that isn't very common in purely F# code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants
You can’t perform that action at this time.