“元组”;无法在外呼中封送;尝试将Haskell函数导出到C时
我试图在Haskell中使用“元组”;无法在外呼中封送;尝试将Haskell函数导出到C时,c,haskell,C,Haskell,我试图在Haskell中使用Foreign.C.Types从C调用Haskell,但它在编译器中不断显示此错误: GHCi 8.6.3版编译的确切代码: {-# LANGUAGE ForeignFunctionInterface #-} module Func where import Foreign.C.Types verify_hp :: (CInt, CInt) -> CInt verify_hp (hp, maxHp) = if hp < maxHp then hp
Foreign.C.Types
从C调用Haskell,但它在编译器中不断显示此错误:
GHCi 8.6.3版编译的确切代码:
{-# LANGUAGE ForeignFunctionInterface #-}
module Func where
import Foreign.C.Types
verify_hp :: (CInt, CInt) -> CInt
verify_hp (hp, maxHp) = if hp < maxHp then hp + 10 else maxHp
func_hs :: (CInt, CInt) -> CInt
func_hs (hp, maxHp) = if verify_hp(hp,maxHp) == hp + 10 && hp < maxHp then hp + 10 else maxHp
foreign export ccall func_hs :: (CInt, CInt) -> CInt
{-#语言外来函数接口#-}
模块Func where
导入外国C.C.类型
验证hp::(CInt,CInt)->CInt
验证_hp(hp,maxHp)=如果hpCInt
func_hs(hp,maxHp)=如果验证_hp(hp,maxHp)=hp+10&&hpCInt
为什么会发生这种情况?我如何修复它?您不应该取消导出函数的参数。用它代替您的
func\u hs
,它会很好地工作:
func\u hs::CInt->CInt->CInt
func_hs hp maxHp=如果验证_hp(hp,maxHp)=hp+10&&hpCInt->CInt
在工作版本中,func\u hs
的C签名如下所示:
int func_hs(int hp,int maxHp);
在原始的非工作版本中,它必须如下所示:
int func_hs(元组hp_和_maxHp);//无效的C!
{-# LANGUAGE ForeignFunctionInterface #-}
module Func where
import Foreign.C.Types
verify_hp :: (CInt, CInt) -> CInt
verify_hp (hp, maxHp) = if hp < maxHp then hp + 10 else maxHp
func_hs :: (CInt, CInt) -> CInt
func_hs (hp, maxHp) = if verify_hp(hp,maxHp) == hp + 10 && hp < maxHp then hp + 10 else maxHp
foreign export ccall func_hs :: (CInt, CInt) -> CInt