yep .... FFI<br><br>
<div><span class="gmail_quote">On 10/22/07, <b class="gmail_sendername">Neil Mitchell</b> &lt;<a href="mailto:ndmitchell@gmail.com">ndmitchell@gmail.com</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Hi Bill,<br><br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; I am really talking about a module or perhaps a Haskell class that<br>&gt; &gt; &gt; provides notion for multiple threads of execution, semaphores, .. that
<br>&gt; &gt; &gt; &quot;hides&quot; POSIX vs Win32 APIs .. i.e. the underlying OS APIs would be<br>&gt; totally<br>&gt; &gt; &gt; hidden.<br>&gt; &gt;<br>&gt; &gt; I think you are thinking in a &quot;C&quot; way. In Haskell, portable is the
<br>&gt; &gt; default. If you want to stop your code being portable, you have to go<br>&gt;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^^ how? If I define something like &quot;class OS where ....&quot; and define a<br>&gt; POSIX instance of &quot;class OS&quot; and a Win32 API instance.. function calls will
<br>&gt; be to the instances and hence the OS APIs are visible. Yes?<br><br>OK, I think I&#39;m slowly figuring out what you are meaning. You want to<br>write some code which runs on POSIX, and some which runs on Win32,<br>
each of which bind to some foreign library which is different on both<br>operating systems.<br><br>The key thing to note about this is that whether a program is running<br>on Windows or Posix is fixed at compile time. Things like classes can
<br>do some of what you seem to be after, but it tends to be easier to<br>reach for the C pre processor.<br><br>Let&#39;s take a simple login scenario. In Linux you enter the user name<br>using the call getLine, and in Windows you call something else like
<br>getInputString. The way I would structure this would be:<br><br>getUserName :: IO String<br>#ifdef WINDOWS<br>getUserName = getInputString<br>#else<br>getUserName = getLine<br>#endif<br><br>(Note - it wouldn&#39;t be WINDOWS - I can&#39;t remember what the blessed CPP
<br>for distinguishing Windows and Posix is)<br><br>Then your logic code can call getUserName, and the platform<br>differences are papered over.<br><br>You could use classes, but for something which is OS dependent, I&#39;d
<br>tend to use the CPP.<br><br>Thanks<br><br>Neil<br></blockquote></div><br>