<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p>Yes you can call Haskell code from C:
<a class="moz-txt-link-freetext" href="https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ffi-ghc.html#foreign-export-ghc">https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ffi-ghc.html#foreign-export-ghc</a><br>
    </p>
    If you really want to use Haskell, I would go full Haskell to avoid
    complications (you can update the FUSE bindings if necessary). On
    the other hand, if you plan to distribute your FS implementation to
    a non-Haskell audience, maybe it would be better to write it fully
    in C.<br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 10/05/2016 20:56, Silent Leaf wrote:<br>
    </div>
    <blockquote
cite="mid:CAGFccjPhfVOGq_G6EL2D_XBgSPdocKHJxhuJdmVN8+1vsgEgGA@mail.gmail.com"
      type="cite">
      <div dir="ltr">Thanks! FUSE seems a perfect way to do what I wanna
        do.<br>
        <br>
        Hypothetically, what if I wanted to bypass the Haskell bindings,
        directly use FUSE in C, but write most of the actual operations
        in Haskell? <br>
        AKA, is it possible to call haskell functions/programs *from* C
        code? And have all individual calls to the Haskell parts be
        allowed to share private data, rather than being independent,
        isolated calls?<br>
        <br>
        It's just an idea, I figured since writing a fuse filesystem in
        C doesn't seem too complicated (i found a tutorial, and it just
        looks like what the Haskell bindings is proposing, except well
        in theory one has to write everything in C) and i figured
        perhaps it'd be better/faster, possibly less buggy (the Haskell
        bindings are tagged experimental, of which i couldn't tell the
        true interpretation, but which doesn't seem terribly appealing
        at first sight) to write the FUSE in C, *except* for, well most
        of the actual "doing something" code, aka the FS operations,
        which would be written in Haskell.<br>
        <br>
        AKA, the final program would start with C, but under the hood
        use Haskell for most of the meaningful code. This, of course, if
        such a thing is even possible in the first place! And easily,
        needless to say. Considering for that matter as I said that the
        Haskell parts should be able to save private data of its own
        without having to "start over" the "situation analysis" for each
        individual call to one of the filesystem operations.<br>
        <br>
        Thanks a lot again!<br>
        <br>
        Le lundi 9 mai 2016, Sylvain Henry <<a moz-do-not-send="true"
          href="mailto:sylvain@haskus.fr" target="_blank">sylvain@haskus.fr</a>>
        a écrit :<br>
        > Hi,<br>
        ><br>
        > You don't have to write a kernel module (which would better
        be written in C), you can do everything in userspace and in
        Haskell with FUSE: <a moz-do-not-send="true"
          href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace"
          target="_blank">https://en.wikipedia.org/wiki/Filesystem_in_Userspace</a><br>
        > It seems to already have Haskell bindings: <a
          moz-do-not-send="true"
href="https://hackage.haskell.org/package/HFuse-0.2.4.5/docs/System-Fuse.html"
          target="_blank"><a class="moz-txt-link-freetext" href="https://hackage.haskell.org/package/HFuse-0.2.4.5/docs/System-Fuse.html">https://hackage.haskell.org/package/HFuse-0.2.4.5/docs/System-Fuse.html</a></a><br>
        ><br>
        > To implement the file system operations, you can use binary
        (<a moz-do-not-send="true"
          href="https://hackage.haskell.org/package/binary"
          target="_blank">https://hackage.haskell.org/package/binary</a>),
        Foreign.Ptr, Data.Bits, etc. You can write data on any real
        partition by using the associated block devices (e.g.,
        /dev/sda1).<br>
        ><br>
        > Sylvain<br>
        ><br>
        > On 09/05/2016 20:50, Silent Leaf wrote:<br>
        ><br>
        > Mostly all in the title.<br>
        ><br>
        > I have a project of developing a personal filesystem,
        possibly at first virtual (the file(s) representing a virtual
        partition formatted with my filesystem, would be saved in a host
        filesys, eg ext4 or whatever), but probably in the end not
        virtual, directly working on the contents of a real partition.<br>
        ><br>
        > Can haskell do that kind of thing, aka writing data on a
        partition directly (without using a known filesys), etc? Is it
        at least more or less adapted for this task (not talking about
        performances, unless the consequences be a *really* slow
        filesys), aka doable, easily doable, relatively speaking (aka
        not worse than with another language)?<br>
        > Incidentally, if i wanted Linux to recognize the filesys,
        i've heard one has to write a module and put it in connection
        with the kernel or something. could haskell do that?<br>
        ><br>
        > if that's a "no" somewhere for one of my questions, which
        parts can't be written in haskell (without horrible performances
        or code very very hard to write), and can they be written in C
        (or whatever) as foreign functions? which parts would that
        represent for the whole program?<br>
        ><br>
        > Thanks a lot in advance!<br>
        ><br>
        > PS: just in case, tips on sources of information on how to
        do any of the above will be extremely appreciated! (even if it's
        in, say C, for that matter, providing there's a way to translate
        the steps into a haskell program)<br>
        ><br>
        > _______________________________________________<br>
        > Beginners mailing list<br>
        > <a moz-do-not-send="true"
          href="mailto:Beginners@haskell.org" target="_blank">Beginners@haskell.org</a><br>
        > <a moz-do-not-send="true"
          href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners"
          target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
        ><br>
        >
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Beginners mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Beginners@haskell.org">Beginners@haskell.org</a>
<a class="moz-txt-link-freetext" href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>