<div class="gmail_quote">On Sun, Jul 11, 2010 at 4:06 PM, Brandon S Allbery KF8NH <span dir="ltr">&lt;<a href="mailto:allbery@ece.cmu.edu" target="_blank">allbery@ece.cmu.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

The whole point of the .net CLR is that the implementation (Windows<br>
COM, Mono, etc.) is hidden; you work with the CLR directly, *not* the<br>
implementation behind it. </blockquote><div><br>True. At least for CLR code that only deals with more CLR code.<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

hs-dotnet is binding to the<br>
CLR interfaces, *not* the implementation details that the CLR is designed to<br>
hide. </blockquote><div><br>I trust you understand for haskell to access CLR it must make use of the FFI native layer and that when I create a new C# class no haskell modules are automatically created.<br><br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

The CLR itself, of course, needs to link to other libraries supplying<br>
its implementation details,</blockquote><div><br>Each implementation of the CLR is providing an API for calling into the CLR from the outside. While calling out via p/invoke is platform independent (the p/invoke api itself, there&#39;s no guarantee of a specific lib existing), calling in is implementation specific. If a new CLR implementation was written in javascript I wouldn&#39;t be too surprised if they didn&#39;t provide the same header files as mono.<br>

 <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> but if that ever becomes visible at the level<br>
hs-dotnet is using then the CLR is completely useless.<br></blockquote><div><br>Completely useless? The CLR was not created for interop but interop was created because some of us don&#39;t target the CLR. C#, VB.Net, F#, P#, IronPython, etc... can call each others code uniformly no matter who&#39;s implementation/platform is be used. This is what the CLR is there for, guaranteeing seem-less integration within not seem-less interop. The idea is that with modern hardware it became practical to stop writing native code and target either CLR or JVM but it was also solving previous language integration issues of the 90&#39;s. COM was messy and verbose but it kinda worked for getting OO code to work between any native language that supported COM.<br>

<br>If there was a IronHaskell for example we too would benefit platform independent code that just worked anywhere. Most of us are using GHC however, which produces native code instead of common intermediate language but we can access CLR through either hs-dotnet or Salsa. One of 2 things must happen to use these with mono. Ideally each library would have a stage in configuration that checked whether .Net exists or Mono exists and use the appropriate headers and libs accordingly during the build stage. The other option is less than ideal but it&#39;s advantage is that it requires no changes to be applied to hs-dotnet: Provide the <a href="http://linux.lsdev.sil.org/wiki/index.php/Libcom" target="_blank">libcom</a> to all non windows machines that you intend to use hs-dotnet on.<br>

</div></div><br>