Types 固定大小的矩阵,也许
我正在用PureScript编写一个棋盘游戏,它包含一个精确大小为2x7的矩阵(在某些变体中,它可以是4x7)。我正在使用的包有一个函数,它返回一个Types 固定大小的矩阵,也许,types,purescript,Types,Purescript,我正在用PureScript编写一个棋盘游戏,它包含一个精确大小为2x7的矩阵(在某些变体中,它可以是4x7)。我正在使用的包有一个函数,它返回一个Maybe(数组a) 当我确信Matrix.getRow 0总是返回第一行(因为矩阵的大小固定为2x7)时,处理not的最佳方法是什么 目前,我有丑陋的代码来处理Maybes,这显然不是很理想: notPossible :: Array Cell notPossible = [99, 99, 99, 99, 99, 99, 99] -- never
Maybe(数组a)
当我确信Matrix.getRow 0
总是返回第一行(因为矩阵的大小固定为2x7)时,处理not的最佳方法是什么
目前,我有丑陋的代码来处理Maybes,这显然不是很理想:
notPossible :: Array Cell
notPossible = [99, 99, 99, 99, 99, 99, 99] -- never used
row n = fromMaybe notPossible $ Matrix.getRow n state.cells
PureScript使用类型系统跟踪偏好,其中偏好是指函数不会为所有可能的输入生成返回值的属性 如果要绕过类型系统并保证不会传递无效输入,可以使用
Partial.Unsafe.unsafePartial::for all a。(Partial=>a)->来自purescript Partial
包的函数
使用部分函数fromJust
fromData.Maybe
Data.Maybe.fromJust :: forall a. Partial => Maybe a -> a
然后可以构造不安全的行函数:
unsafeRow n xs = unsafePartial fromJust (Matrix.getRow n xs)
您还可以将调用unsafePartial的时间延迟到可以保证索引永远不会超出范围的时间点,因为类型系统将为您自动传播它。PureScript使用类型系统跟踪偏好,其中偏好是指函数不会为所有可能的输入生成返回值的属性
如果要绕过类型系统并保证不会传递无效输入,可以使用Partial.Unsafe.unsafePartial::for all a。(Partial=>a)->来自purescript Partial
包的函数
使用部分函数fromJust
fromData.Maybe
Data.Maybe.fromJust :: forall a. Partial => Maybe a -> a
然后可以构造不安全的行函数:
unsafeRow n xs = unsafePartial fromJust (Matrix.getRow n xs)
您还可以将调用unsafePartial的时间延迟到可以保证索引永远不会超出范围的时间点,因为类型系统将为您自动传播它