Types 固定大小的矩阵,也许

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

我正在用PureScript编写一个棋盘游戏,它包含一个精确大小为2x7的矩阵(在某些变体中,它可以是4x7)。我正在使用的包有一个函数,它返回一个
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
from
Data.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
from
Data.Maybe

Data.Maybe.fromJust :: forall a. Partial => Maybe a -> a
然后可以构造不安全的行函数:

unsafeRow n xs = unsafePartial fromJust (Matrix.getRow n xs)
您还可以将调用unsafePartial的时间延迟到可以保证索引永远不会超出范围的时间点,因为类型系统将为您自动传播它