ho trovato questo pezzo di codice nel pacchetto Haskell sendfile
:Che cosa significa "#type" nell'interfaccia di funzione straniera Haskell?
-- sendfile64 gives LFS support
foreign import ccall unsafe "sendfile64" c_sendfile
:: Fd -> Fd -> Ptr (#type off64_t) -> (#type size_t) -> IO (#type ssize_t)
1) Che cosa significa #type
significa e 2) perché ottengo questo errore,
[1 of 1] Compiling Linux.Splice (splice.hs, splice.o)
splice.hs:40:12: parse error on input `type'
quando io stesso cerco di usarlo come segue ?:
ghc --make splice.hs
splice.hs:
{-# LANGUAGE ForeignFunctionInterface #-}
module Linux.Splice where
import Data.Word
import System.Posix.Types
-- SPLICE
-- fcntl.h
-- ssize_t splice(
-- int fd_in,
-- loff_t* off_in,
-- int fd_out,
-- loff_t* off_out,
-- size_t len,
-- unsigned int flags
--);
foreign import ccall unsafe "fnctl.h splice" c_splice
:: Fd
-> Ptr (#type {- < parse error -} loff_t)
-> Fd
-> Ptr (#type loff_t)
-> (#type size_t)
-> Word
-> IO (#type ssize_t)
(usando GHC 7.4.x)
http://www.haskell.org/ghc/docs/latest/html/users_guide/hsc2hs.html – sdcvvc
Devo sottolineare che questa importazione straniera dovrebbe ** non ** essere contrassegnata come non sicura. Quando una funzione straniera ha marcato blocchi 'non sicuri', può impedire l'esecuzione di altri thread (in un programma compilato con GHC con' -threaded'). –
@ JoeyAdams Oh grazie mille per averlo fatto notare! Sto lavorando su una lucida implementazione di splicing dei socket di rete per il mio server proxy. Che spero di usare su Linux invece che su cicli di lettura/scrittura, continuerei comunque a utilizzarlo su altri sistemi operativi per il momento. –