2016-11-10 143 views
0

我正在用PureScript写一个棋盘游戏,涉及一个确切大小为2x7的矩阵(在某些变化中它可以是4x7)。我正在使用的软件包有一个Matrix.getRow函数,它返回Maybe (Array a)固定大小的矩阵和也许

什么是必须处理Maybe返回时,我知道肯定Matrix.getRow 0总是要返回的第一行(因为矩阵是固定大小的2×7)最好的方法?

目前我有丑陋的代码来处理Maybes这显然不是很理想:

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

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

回答

2

PureScript使用类型系统来跟踪偏好,其中偏好是一个功能不产生一个返回值的属性为所有可能的投入。

如果你想规避类型系统并保证你不会通过无效输入,你可以使用purescript-partial包中的Partial.Unsafe.unsafePartial :: forall a. (Partial => a) -> a函数。

通过使用部分功能fromJustData.Maybe

Data.Maybe.fromJust :: forall a. Partial => Maybe a -> a 

,那么你可以构建你的不安全行功能:

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

您也可以推迟调用unsafePartial到使你能够保证一个点您的索引永远不会超出范围,因为类型系统会自动为您传播索引。