Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3595170
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 18, 20262026-05-18T19:49:01+00:00 2026-05-18T19:49:01+00:00

Does anyone know why this fails to compile? type MyInterface<‘input, ‘output> = abstract member

  • 0

Does anyone know why this fails to compile?

type MyInterface<'input, 'output> = 
    abstract member MyFun: 'input -> 'output

type MyClass() = 
    interface MyInterface<string, unit> with
        member this.MyFun(input: string) = ()
    //fails with error FS0017: The member 'MyFun : string -> unit' does not have the correct type to override the corresponding abstract method.
type MyUnit = MyUnit
type MyClass2() = 
    //success
    interface MyInterface<string, MyUnit> with
        member this.MyFun(input: string) = MyUnit
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-18T19:49:02+00:00Added an answer on May 18, 2026 at 7:49 pm

    This looks like a nasty corner-case in the F# language, but I’m not sure if it qualifies as a by-design limitation or a bug in the compiler. If it is by design limitation, then the error message should say that (because currently, it doesn’t make much sense).

    Anyway, the problem is that the F# compiler doesn’t generate code that actually contains the unit type in the IL. It replaces it with void (when used as a return type) or with empty argument list (when used as a method or function argument).

    This means that in the MyClass type, the compiler decides to compile the MyFun member as a method that takes string and returns void (but you cannot use void as a generic type argument, so this just doesn’t work). In principle, the compiler could use the actual unit type in this case (because that’s the only way to get it working), but that would probably create other inconsistencies elsewhere.

    Your trick with creating MyUnit is, I think, a perfectly fine way to solve the problem. Even the core F# library uses something like MyUnit in some places of the implementation (in asynchronous workflows) to deal with some limitations of unit (and the way it is compiled).

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Does anyone know what this means. Getting this in C# winforms applications: Not a
Does anyone know what this value is for? If it is set to 1,
I cannot find this in the documentation anywhere. Does anyone know if this is
Does anyone know what is wrong with this query? SELECT DISTINCT c.CN as ClaimNumber,
Does anyone know how to turn this string: Smith, John R Into this string:
does anyone know if you can do something like this using the (N)Hibernate criteria
Does anyone know of crossbrowser equivalent of explicitOriginalTarget event parameter? This parameter is Mozilla
Does anyone know? And a bigger question is what happens when you encounter this
Does anyone know how to change the brush for a menu's background? This sounds
Anyone know this compiler feature? It seems GCC support that. How does it work?

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.