Drew Noakes
Drew Noakes

Reputation: 310852

How to implement an interface member that returns void in F#

Imagine the following interface in C#:

interface IFoo {
    void Bar();
}

How can I implement this in F#? All the examples I've found during 30 minutes of searching online show only examples that have return types which I suppose is more common in a functional style, but something I can't avoid in this instance.

Here's what I have so far:

type Bar() =
    interface IFoo with
        member this.Bar() =
            void

Fails with _FS0010:

Unexpected keyword 'void' in expression_.

Upvotes: 20

Views: 2524

Answers (4)

Márcio Azevedo
Márcio Azevedo

Reputation: 123

The equivalent in F# is:

type IFoo =
    abstract member Bar: unit -> unit

Upvotes: 3

ChaosPandion
ChaosPandion

Reputation: 78262

The equivalent is unit which is syntactically defined as ().

type Bar() =
    interface IFoo with
        member this.Bar () = ()

Upvotes: 22

Brian
Brian

Reputation: 118865

For general info on F# types, see

The basic syntax of F# - types

From that page:

The unit type has only one value, written "()". It is a little bit like "void", in the sense that if you have a function that you only call for side-effects (e.g. printf), such a function will have a return type of "unit". Every function takes an argument and returns a result, so you use "unit" to signify that the argument/result is uninteresting/meaningless.

Upvotes: 7

corvuscorax
corvuscorax

Reputation: 5930

The return type needs to be (), so something like member this.Bar = () should do the trick

Upvotes: 6

Related Questions