Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“元组”;无法在外呼中封送;尝试将Haskell函数导出到C时_C_Haskell - Fatal编程技术网

“元组”;无法在外呼中封送;尝试将Haskell函数导出到C时

“元组”;无法在外呼中封送;尝试将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

我试图在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 + 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