用于安全导入javascript函数的purescript FFI类型

用于安全导入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

尝试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
现在,如何使用类型为
未定义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 [])