Skip to content

Compilation error when implementing interface using object expressions and tuple argument #1200

@JanWosnitza

Description

@JanWosnitza

Surprising compilation error when trying to implement an interface using object expressions.

Repro Steps

type IInterface =
    abstract Function : (int32 * int32) -> unit

{ new IInterface with
    member this.Function (i, j) = ()
}

Expected

Compilation without errors like this:

type IInterface =
    abstract Function : int32 -> unit

{ new IInterface'with
    member this.Function (i) = ()
}

Actual

The compilation error is:

FS0768: The member 'Function' does not accept the correct number of arguments, 1 arguments are expected

Severity

  • Confusing for newcomers.
  • Cumbersome to remember.
  • But easy workaround.

Version

  • F# 4.0 (FSharp.Core, 4.4.0.0)
  • F# Compiler version 14.0.23413.0
  • .NET Runtime, Framwork 4.6
  • Windows 10
  • Visual Studio Community 2015 version 14.0.2513.00 Update 2

Workaround

Surround the error producing parameter with additional brackets:

type IInterface =
    abstract Function : (int32 * int32) -> unit

{ new IInterface with
    member this.Function ((i, j)) = ()
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions