我正在用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
答案 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延迟到可以保证索引永远不会超出范围的点,因为类型系统会自动为您传播它。