代码之家  ›  专栏  ›  技术社区  ›  WHITECOLOR

将多态记录传递给外部函数

  •  0
  • WHITECOLOR  · 技术社区  · 4 年前

    我有 R1 R2 记录类型,我需要通过 R1级 R2级 对于外部函数(它可以处理r1或r2记录结构),是否可以这样做(我想可能是通过转换为外部对象)?

    或者我需要声明两个不同的外国进口产品(使用不同的类型签名进行传递) R1级 R2级 )指向相同的js函数?

    我发现的另一种方法是 unsafeCoerce 对于类型转换:

    foreign import data R1orR2 ∷ Type
    
    fromR1 :: R1 -> R1orR2
    fromR1 = unsafeCoerce
    
    fromR2 :: R2 -> R1orR2
    fromR2 = unsafeCoerce
    

    所以也许还有其他的方法。

    0 回复  |  直到 4 年前
        1
  •  3
  •   Fyodor Soikin    4 年前

    编写FFI绑定时, unsafeCoerce 很好:毕竟, foreign import 已经有了所有相同的缺点,所以你不会真的失去任何东西。

    是的,你想到了什么- R1orR2 -是FFI绑定中经常使用的正确方法。

    您可能还想退房 undefined-is-not-a-problem untagged-union 图书馆。他们在这一领域提供了一些更先进和通用的技术。