2016-11-10 2 views
0

私は正確なサイズが2x7の行列を含むPureScriptでボードゲームを書いています(特定のバリエーションでは4x7になることがあります)。私が使用しているパッケージMaybe (Array a)を返すMatrix.getRow関数があります。固定サイズの行列と多分

私はMatrix.getRow 0はいつも(行列が固定サイズの2×7であるため)最初の行を返すために起こっていることを確実に知るときMaybeリターンに対処する必要はありませんへの最善のアプローチは何ですか?

現在、私は明らかに非常に望ましいものではない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機能を使用できます。また、あなたはことを保証することができた時点までunsafePartialを呼び出す遅らせることができ

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

:あなたは、あなたの危険な行関数を構築することができfromJust

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

部分関数を使用することにより

タイプシステムが自動的にそれを伝播するので、インデックスは決して境界から外れません。

関連する問題