用于安全导入javascript函数的purescript FFI类型
尝试purescript FFI,并遵循“purescript By Example”一书,我创建了一个JS文件来获取数组的头部:用于安全导入javascript函数的purescript FFI类型,javascript,ffi,purescript,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 hea
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
现在,如何使用类型为未定义a
的值?我需要定义什么函数来提取a
,以便在其他地方使用它?
本书中的示例仅定义了一个函数:
foreign import isUndefined :: forall a. Undefined a -> Boolean
作为:
但我需要这样的东西:
foreign import getFromUndefined :: forall a. Undefined a -> a
是否可以用JS编写该函数,在这种情况下,当未定义的a
实际上是未定义的
时,返回什么?
或者,我可以重新定义类型
未定义的a
,以允许对其进行模式匹配以提取a吗?您可以实现如下功能
foreign import fromUndefinedWithDefault :: forall a. a -> Undefined a -> a
而是通过重用您对定义isUndefined
所做的操作
您编写的类型无法实现,因为我可以安全地使用它来定义
bad :: Void
bad = getFromUndefined (head [])
bad :: Void
bad = getFromUndefined (head [])