2016-11-10 5 views
0

Ich schreibe ein Brettspiel in PureScript, das eine Matrix der genauen Größe 2x7 beinhaltet (in bestimmten Variationen kann es 4x7 sein). Das Paket, das ich verwende, hat eine Matrix.getRow-Funktion, die Maybe (Array a) zurückgibt.Matrix fester Größe und Vielleicht

Was ist der beste Ansatz für nicht haben mit Maybe kehrt beschäftigen, wenn ich sicher weiß, dass Matrix.getRow 0 immer die erste Zeile zurückkehren wird (da die Matrix fester Größe 2x7 ist)?

Zur Zeit habe ich hässlich Code mit Maybes zu beschäftigen, die offensichtlich nicht sehr wünschenswert ist:

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

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

Antwort

2

PURESCRIPT das Typ-System verwendet Parteilichkeit zu verfolgen, wo Parteilichkeit die Eigenschaft, die eine Funktion keinen Rückgabewert produziert für alle möglichen Eingaben.

Wenn Sie das Typsystem umgehen und sich selbst versichern möchten, dass Sie keine ungültigen Eingaben erhalten, können Sie die Partial.Unsafe.unsafePartial :: forall a. (Partial => a) -> a Funktion aus dem purescript-partial Paket verwenden.

Durch die partielle Funktion fromJust von Data.Maybe

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

können Sie dann Ihre unsichere Zeile Funktion konstruieren:

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

Sie können auch zu einem Punkt verzögern Aufruf unsafePartial, an dem Sie garantieren können, dass Ihr Index ist niemals außerhalb der Grenzen, da das Typsystem es automatisch für Sie propagiert.

Verwandte Themen