尝试使用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?
答案 0 :(得分:1)
你可以实现像
这样的东西foreign import fromUndefinedWithDefault :: forall a. a -> Undefined a -> a
而是重复使用您定义的isUndefined
。
您编写的类型无法安全实施,因为我可以使用它来定义
bad :: Void
bad = getFromUndefined (head [])