by this code
module ObjectRe =
type BM = A | N
type Object = {
Name: string
Pattern: BM array
}
let patterns = [|{Name = "Pro"; Pattern = [|A;N;N;A|]} |]
I always get this error message
System.TypeLoadException: Could not load type 'FSI_0007+ObjectRe+Object[]' from assembly 'FSI-ASSEMBLY, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00038] in <94fd79a3b7144c54b4cb162b50fc7761>:0
Stopped due to error
Has anyone an idea? I use Visual Studio Code on Mac.
Thanks
I can also reproduce this on macOS 10.11, mono 4.6.
The minimal reproduction is :
module X =
type Y = Y
let l = [| Y |]
With a workaround :
module X =
type Y = Y
let g = List.toArray [ Y ]
So in your case replace both the inner and the outer [| |]
declarations.
Why this happens only in VS Code/fsharpi but not in Xamarin?
If you fire up activity monitor you will see that VS Code/fsharpi uses the
/Library/Frameworks/Mono.framework/Versions/4.6.0/lib/mono/4.5/fsi.exe
binary, but Xamarin Studio uses the FCS Xamarin Studio.app/Contents/Resources/lib/monodevelop/AddIns/BackendBindings/MonoDevelop.FSharpInteractive.Service.exe
You can check also the version on the first message from the interactive (F# Interactive for F# 4.1
, those might be different).
Finally, i believe this is a bug on mono + dynamic assemblies, triggered by the code emitted by the fsi
. Compiling this code to an exe
works fine on all platforms (and if you check the generated IL seems pretty normal).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With