首页 > 解决方案 > 将多态记录传递给外部函数

问题描述

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

或者我是否需要声明两个不同的外部导入(具有不同的类型签名用于传递R1R2)指向同一个 js 函数?

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

foreign import data R1orR2 ∷ Type

fromR1 :: R1 -> R1orR2
fromR1 = unsafeCoerce

fromR2 :: R2 -> R1orR2
fromR2 = unsafeCoerce

所以也许还有其他方法。

标签: purescript

解决方案


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

是的,你想出的R1orR2——是在 FFI 绑定中经常使用的正确方法。

您可能还想查看undefined-is-not-a-problemuntagged-union图书馆。他们在该领域提供了一些更高级和通用的技术。


推荐阅读