purescript FFI类型可以安全地导入javascript函数

时间:2017-06-29 18:56:17

标签: javascript ffi purescript

尝试使用purescript FFI,然后按照" Purescript By Example"我已经创建了一个JS文件来获取数组的头部:

exports.head = function(arr) {
  return arr[0];
};

在purescript中,我为head的类型签名声明了一个新的Undefined数据,以指示当数组为空时返回undefined

foreign import data Undefined :: Type -> Type
foreign import head :: forall a. Array a -> Undefined a

现在,如何使用Undefined a类型的值?我需要将哪些函数定义为提取 a,以便我可以在别处使用它? 本书中的示例仅通过定义函数来实现:

foreign import isUndefined :: forall a. Undefined a -> Boolean

为:

exports.isUndefined = function(value) {
  return value === undefined;
};

但是我需要这样的东西:

foreign import getFromUndefined :: forall a. Undefined a -> a

是否可以在JS中编写该函数,在这种情况下,当Undefined a真正undefined时要返回什么? 或者,我可以重新定义类型Undefined a以允许其上的patern匹配提取 a?

1 个答案:

答案 0 :(得分:1)

你可以实现像

这样的东西
foreign import fromUndefinedWithDefault :: forall a. a -> Undefined a -> a

而是重复使用您定义的isUndefined

您编写的类型无法安全实施,因为我可以使用它来定义

bad :: Void
bad = getFromUndefined (head [])