C 什么是'#类型';在Haskell外部功能接口中是什么意思?
我在HaskellC 什么是'#类型';在Haskell外部功能接口中是什么意思?,c,haskell,types,ffi,preprocessor-directive,C,Haskell,Types,Ffi,Preprocessor Directive,我在Haskellsendfile包中找到了这段代码: 1) #type是什么意思?2)为什么会出现此错误 [1 of 1] Compiling Linux.Splice ( splice.hs, splice.o ) splice.hs:40:12: parse error on input `type' 当我自己尝试按如下方式使用它时: ghc --make splice.hs splice.hs: {-# LANGUAGE ForeignFunctionInterface
sendfile
包中找到了这段代码:
1) #type
是什么意思?2)为什么会出现此错误
[1 of 1] Compiling Linux.Splice ( splice.hs, splice.o )
splice.hs:40:12: parse error on input `type'
当我自己尝试按如下方式使用它时:
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)
{-#语言外来函数接口#-}
模块Linux.Splice在哪里
导入数据.Word
导入System.Posix.Types
--拼接
--fcntl.h
--交叉拼接(
--int fd_in,
--落下,
--int fd_out,
--离开,
--尺寸透镜,
--无符号整型标志
-- );
国外进口ccall不安全的“fnctl.h接头”c_接头
::Fd
->Ptr(#类型{-Fd
->Ptr(类型loff)
->(#字体大小#
->话
->IO(#类型ssize#t)
(使用GHC 7.4.x)正如scdvvc所指出的,它使用由定义的C预处理宏来专门针对编译它的系统自定义代码。您需要使用
hsc2hs
来为您的代码定义适当的宏。我应该指出,此外部导入不应标记为不安全。当标记为不安全
的外部函数阻塞时,它可以阻止其他线程运行(在使用GHC编译的程序中,使用-线程
)。@joey adams Oh非常感谢您指出这一点!我正在为我的代理服务器开发一个完善的网络套接字管道拼接实现。我希望在Linux上使用它,而不是读/写循环,目前我仍将在其他操作系统上使用它
{-# 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)