When having module name clashes, namespacing is important.
For example, you have two modules named "Foo" in the same F# assembly. If you place them under namespaces Bar.Foo and Baz.Foo, the compiler is happy.
However, normally developers try to mimic directory-file name structures to map exactly with namespace-type ones. In this case, the F# compiler is not helping, because placing two Foo.fs for the same project, even if in different directories Bar\Foo.fs and Baz\Foo.fs, it gives this error:
error FS0239: An implementation of the file or module 'Foo' has already been given
Foo: one namespaced Bar.Foo (BarFoo.fs) and the other Baz.Foo (BazFoo.fs).Bar and rename the file to Foo.fs.Baz and rename the file to Foo.fs.F# compiler should succeed.
error FS0239: An implementation of the file or module 'Foo' has already been given
Rename files to redundant names such as BarFoo.fs and BazFoo.fs (even if they're already in Bar and Baz directories).
Provide any related information
Didn't we fix this already?
@forki I see the fix for that was merged in the 3rd of April. Did that change make it to the F#4.1 release?
@knocte It will be in the 15.3 update, and is in the process of being integrated into the Mono 5.x series (which already contain F# 4.1, but not this fix)
@knocte It will be in the 15.3 update
Thanks for the info, but what is 15.3 exactly? Is it a minor version number? F# 4.1.15.3? Where is that version number reflected?
15.3 --> VS 2017 Update 3.
VS 2017 is the 15th version of VS and how we refer to it internally. That leaks out into GitHub sometimes out of habit.
ok thanks very much @cartermp
This came up again.
Using VS Community 2017 - 15.6.2
Visual F# Tools 10.1 for F# 4.1
The error seemed to go away after closing the file, and reopening it, making a change, saving, undoing that change, and saving.
The error re-appears if I save the abstract superclass
So, I have:
base/
RestClient.fs
exchanges/
exchange-name/
RestClient.fs
and the exchange-name/RestClient is what gives the error: An implementation of the file or module 'RestClient__2' has already been given.
But the base/RestClient.fs only defines type public IRestClient and type publicAbstractRestClient`
Most helpful comment
This came up again.
Using VS Community 2017 - 15.6.2
Visual F# Tools 10.1 for F# 4.1
The error seemed to go away after closing the file, and reopening it, making a change, saving, undoing that change, and saving.
The error re-appears if I save the abstract superclass
So, I have:
and the
exchange-name/RestClientis what gives the error:An implementation of the file or module 'RestClient__2' has already been given.But the base/RestClient.fs only defines
type public IRestClientandtype publicAbstractRestClient`