2016-11-10 4 views
0

저는 정확한 크기 2x7의 매트릭스가 포함 된 보드 게임을 PureScript로 작성하고 있습니다 (특정 변형은 4x7 일 수 있음). 내가 사용하고있는 패키지 Maybe (Array a)을 반환 Matrix.getRow 함수가 있습니다.고정 크기 매트릭스 및

내가 Matrix.getRow 0 항상 (매트릭스는 고정 된 크기 2X7의 때문에) 첫 번째 행을 반환 할 것이라는 것을 확실히 알고 Maybe 반환을 처리해야 하지에 가장 좋은 방법은 무엇입니까? PureScript는 편견이 함수는 반환 값을 생성하지 않습니다 재산이고, 편견을 추적 형 시스템을 사용

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

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

답변

2

:

현재 나는 분명히 매우 바람직하지 않다 괜찮은 남자를 다루는 추한 코드를 가능한 모든 입력에 대해

유형 시스템을 우회하고 유효하지 않은 입력을 전달하지 않으려면 purescript-partial 패키지의 Partial.Unsafe.unsafePartial :: forall a. (Partial => a) -> a 기능을 사용할 수 있습니다.

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

당신은 또한 보장 할 수있는 점에 unsafePartial 호출 지연시킬 수 있습니다 : 당신이 다음 안전하지 않은 행 기능을 구성 할 수 있습니다 Data.Maybe

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

에서 일부 기능 fromJust를 사용하여

타입 시스템이 자동으로 그것을 전파 할 것이기 때문에 당신의 인덱스는 절대 범위를 벗어나지 않습니다.