How to use out attributes in an F# Interface?

f#

Solution

Here's an example:

open System
open System.Runtime.InteropServices

[<Interface>]
type IPrimitiveParser =
    //
    abstract TryParseInt32 : str:string * [<Out>] value:byref<int> -> bool

[<EntryPoint>]
let main argv =
    let parser =
        { new IPrimitiveParser with
            member __.TryParseInt32 (str, value) =
                let success, v = System.Int32.TryParse str
                if success then value <- v
                success
        }

    match parser.TryParseInt32 "123" with
    | true, value ->
        printfn "The parsed value is %i." value
    | false, _ ->
        printfn "The string could not be parsed."

    0   // Success

Here's your interface, translated:

[<Interface>]
type IStatisticalTests =
    //
    abstract JohansenWrapper :
        dat:float[,] *
        alpha:float *
        doAdfPreTests:bool *
        [<Out>] cointStatus:byref<float> *
        [<Out>] johansenModelParameters:byref<JohansenModelParameters[]>
            -> unit

Problem

I would like to define one of my parameters to be a C# out parameter in one of my interfaces. I realize that F# supports `byref` but how can I apply the `System.Runtime.InteropServices.OutAttribute` to one of my interface parameters? C# Interface I am trying to replicate ``` public interface IStatisticalTests { void JohansenWrapper( double[,] dat, double alpha, bool doAdfPreTests, out double cointStatus, out JohansenModelParameters[] johansenModelParameters); } ```

Original source