固定大小矩阵和Maybe

时间:2016-11-10 11:30:15

标签: types purescript

我正在用PureScript编写一个棋盘游戏,其中包含一个精确大小为2x7的矩阵(在某些变体中它可以是4x7)。我正在使用的包具有Matrix.getRow函数,该函数返回Maybe (Array a)

当我确定Maybe总是会返回第一行时,必须处理Matrix.getRow 0返回的最佳方法是什么(因为矩阵)是固定大小2x7)?

目前我处理Maybes的代码很难看,这显然不是很理想:

notPossible :: Array Cell
notPossible = [99, 99, 99, 99, 99, 99, 99]  -- never used

row n = fromMaybe notPossible $ Matrix.getRow n state.cells

1 个答案:

答案 0 :(得分:2)

PureScript使用类型系统来跟踪偏好,其中偏好是函数不为所有可能输入生成返回值的属性。

如果您想绕过类型系统并保证自己不会传递无效输入,可以使用Partial.Unsafe.unsafePartial :: forall a. (Partial => a) -> a包中的purescript-partial功能。

使用fromJust

中的部分功能Data.Maybe
Data.Maybe.fromJust :: forall a. Partial => Maybe a -> a

然后你可以构建不安全的行函数:

unsafeRow n xs = unsafePartial fromJust (Matrix.getRow n xs)

您还可以将unsafePartial延迟到可以保证索引永远不会超出范围的点,因为类型系统会自动为您传播它。