<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.Code, li.Code, div.Code
        {mso-style-name:Code;
        mso-style-link:"Code Char";
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Courier New";
        color:#1F497D;}
span.CodeChar
        {mso-style-name:"Code Char";
        mso-style-link:Code;
        font-family:"Courier New";
        color:#1F497D;}
span.hoenzb
        {mso-style-name:hoenzb;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
.MsoPapDefault
        {mso-style-type:export-only;
        margin-top:6.0pt;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:0cm;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal" style="margin-left:36.0pt">I have started a fresh one here: <a href="https://wiki.haskell.org/Foreign_Function_Interface_(FFI)">
https://wiki.haskell.org/Foreign_Function_Interface_(FFI)</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">Very helpful thank you.  We NEED people to invest effort in good user guides.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">Do also include info from<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><a href="https://wiki.haskell.org/GHC/Using_the_FFI">https://wiki.haskell.org/GHC/Using_the_FFI</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">as well as<o:p></o:p></span></p>
<p class="MsoNormal"><a href="https://wiki.haskell.org/FFI">https://wiki.haskell.org/FFI</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Once you’ve absorbed them both, kill them off and replace with forwarding pointers. Or better still overwrite one or the other with your new page (people may have bookmarked the old links). 
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">What we don’t want is lots of alternative pages, that don’t refer to each other, with contradictory info.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Simon<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Sylvain Henry [mailto:hsyl20@gmail.com]
<br>
<b>Sent:</b> 13 February 2015 18:28<br>
<b>To:</b> Simon Peyton Jones<br>
<b>Cc:</b> Francesco Mazzoli; Manuel Chakravarty; ghc-devs@haskell.org; Geoffrey Mainland (mainland@cs.drexel.edu)<br>
<b>Subject:</b> Re: [Haskell-cafe] Anonymous FFI calls<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
Hi,<br>
<br>
The FFI pages on the wiki are not really in a good shape in my opinion (especially for newcomers).<br>
<br>
I have started a fresh one here: <a href="https://wiki.haskell.org/Foreign_Function_Interface_(FFI)">
https://wiki.haskell.org/Foreign_Function_Interface_(FFI)</a><br>
<br>
This is just the first draft. I will improve it, probably split it in several pages and merge information from other pages, especially pages linked on
<a href="https://wiki.haskell.org/FFI">https://wiki.haskell.org/FFI</a><br>
<br>
Sylvain<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<o:p> </o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
2015-02-12 10:02 GMT+01:00 Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>>:<o:p></o:p></p>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
| Thanks to everyone who replied!<br>
|<br>
| It seems like that through a combination of facilities like `libffi'<br>
| and `addTopDecls' I can do everything that I wanted to do.<br>
<br>
Great.  But please, please, do write up what you learned on the FFI wiki page<br>
        <a href="https://wiki.haskell.org/GHC/Using_the_FFI" target="_blank">https://wiki.haskell.org/GHC/Using_the_FFI</a><br>
<span style="color:#888888"><br>
<span class="hoenzb">Simon</span></span><o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<br>
| -----Original Message-----<br>
| From: Francesco Mazzoli [mailto:<a href="mailto:f@mazzo.li">f@mazzo.li</a>]<br>
| Sent: 12 February 2015 09:00<br>
| To: Simon Peyton Jones<br>
| Cc: Michael Sloan; Manuel Chakravarty; Geoffrey Mainland<br>
| (<a href="mailto:mainland@cs.drexel.edu">mainland@cs.drexel.edu</a>); <a href="mailto:ghc-devs@haskell.org">
ghc-devs@haskell.org</a>; haskell<br>
| Subject: Re: [Haskell-cafe] Anonymous FFI calls<br>
|<br>
| Thanks to everyone who replied!<br>
|<br>
| It seems like that through a combination of facilities like `libffi'<br>
| and `addTopDecls' I can do everything that I wanted to do.<br>
|<br>
| I still want to take a shot at implementing anonymous FFI calls, since<br>
| IMHO I think they are a very small but useful addition to the<br>
| language.<br>
|<br>
| Francesco<br>
|<br>
| On 12 February 2015 at 09:29, Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com">simonpj@microsoft.com</a>><br>
| wrote:<br>
| > |  Also, I meant to say that addTopDecls is only exported by<br>
| > |  "Language.Haskell.TH.Syntax".  While this is a digression, there are<br>
| a<br>
| > |  few other handy functions that are oddly left out of<br>
| > |  "<a href="http://Language.Haskell.TH" target="_blank">Language.Haskell.TH</a>": addDependentFile, addModFinalizer, and<br>
| possibly<br>
| > |  more.<br>
| ><br>
| > That does seem wrong.  Do make a patch!<br>
| ><br>
| > SIMon<br>
| ><br>
| > |<br>
| > |  -Michael<br>
| > |<br>
| > |  On Wed, Feb 11, 2015 at 3:25 PM, Simon Peyton Jones<br>
| > |  <<a href="mailto:simonpj@microsoft.com">simonpj@microsoft.com</a>> wrote:<br>
| > |  > I would LOVE someone to improve the documentation for addTopDecls.<br>
| > |  Manuel Chakravarty and Geoff Mainland were responsible for the<br>
| > |  implementation.<br>
| > |  ><br>
| > |  > Simon<br>
| > |  ><br>
| > |  > | -----Original Message-----<br>
| > |  > | From: ghc-devs [mailto:<a href="mailto:ghc-devs-bounces@haskell.org">ghc-devs-bounces@haskell.org</a>] On Behalf<br>
| Of<br>
| > |  > | Michael Sloan<br>
| > |  > | Sent: 11 February 2015 23:19<br>
| > |  > | To: Francesco Mazzoli<br>
| > |  > | Cc: <a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a>; haskell<br>
| > |  > | Subject: Re: [Haskell-cafe] Anonymous FFI calls<br>
| > |  > |<br>
| > |  > | It seems like addTopDecls[1] will able to help here.<br>
| > |  Unfortunately,<br>
| > |  > | the function is not well documented and not very discoverable<br>
| > |  > | because it's only exported by <a href="http://Language.Haskell.TH" target="_blank">
Language.Haskell.TH</a>.<br>
| > |  > |<br>
| > |  > | The documentation doesn't mention that it can only be used to<br>
| > |  create<br>
| > |  > | new top level functions and FFI imports[2].  I think that adding<br>
| > |  FFI<br>
| > |  > | imports was the main motivation for implementing it.   In the<br>
| past<br>
| > |  > | I've wanted to generate instances via this function, but<br>
| > |  > | unfortunately it's not implemented..<br>
| > |  > |<br>
| > |  > | Hope that helps!<br>
| > |  > | -Michael<br>
| > |  > |<br>
| > |  > | [1] <a href="http://hackage.haskell.org/package/template-haskell-" target="_blank">
http://hackage.haskell.org/package/template-haskell-</a><br>
| > |  > | <a href="http://2.9.0.0/docs/Language-Haskell-TH-Syntax.html#v:addTopDecls" target="_blank">
2.9.0.0/docs/Language-Haskell-TH-Syntax.html#v:addTopDecls</a><br>
| > |  > |<br>
| > |  > | [2]<br>
| > |  > |<br>
| > |  <a href="https://github.com/ghc/ghc/blob/1d982ba10f590828b78eba992e73315dee33" target="_blank">
https://github.com/ghc/ghc/blob/1d982ba10f590828b78eba992e73315dee33</a><br>
| > |  > | f78a/<br>
| > |  > | compiler/typecheck/TcSplice.hs#L818<br>
| > |  > |<br>
| > |  > | On Wed, Feb 11, 2015 at 2:26 AM, Francesco Mazzoli <<a href="mailto:f@mazzo.li">f@mazzo.li</a>><br>
| > |  wrote:<br>
| > |  > | > Hi,<br>
| > |  > | ><br>
| > |  > | > I am in a situation where it would be very useful to call C<br>
| > |  > | > functions without an explicit FFI import.  For example, I'd<br>
| like<br>
| > |  > | > to be able to do<br>
| > |  > | ><br>
| > |  > | >     (foreign import ccall "cadd" :: CInt -> CInt -> CInt) 1 2<br>
| > |  > | ><br>
| > |  > | > instead of declaring the foreign import explicitely at the top<br>
| > |  level.<br>
| > |  > | ><br>
| > |  > | > Is there a way to do this or to achieve similar results in<br>
| some<br>
| > |  > | > other way?<br>
| > |  > | ><br>
| > |  > | > If not, I imagine it would be easy to implement such a<br>
| facility<br>
| > |  in<br>
| > |  > | > GHC, given that the code implementing calling to C functions<br>
| > |  must<br>
| > |  > | > already be present to implement "proper" FFI imports.  I think<br>
| > |  > | > such an addition would be useful in many cases.<br>
| > |  > | ><br>
| > |  > | > Thanks,<br>
| > |  > | > Francesco<br>
| > |  > | > _______________________________________________<br>
| > |  > | > Haskell-Cafe mailing list<br>
| > |  > | > <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
| > |  > | > <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">
http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
| > |  > | _______________________________________________<br>
| > |  > | ghc-devs mailing list<br>
| > |  > | <a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
| > |  > | <a href="http://www.haskell.org/mailman/listinfo/ghc-devs" target="_blank">
http://www.haskell.org/mailman/listinfo/ghc-devs</a><br>
_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/ghc-devs" target="_blank">http://www.haskell.org/mailman/listinfo/ghc-devs</a><o:p></o:p></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:6.0pt;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<o:p> </o:p></p>
</div>
</div>
</div>
</body>
</html>