2016-05-30 12 views
1

私はゲームのために何か作業をしようとしています。私は私がトレースすることができない解析エラーに遭遇しました。制御文のhaskell解析エラー(インデントが誤っているか、かっこが間違っている可能性があります)

getLineDir :: (Int, Int) -> Piece -> Board -> [Piece] 
getLineDir (x,y) (Piece (x',y') player) board 
      | pieceAt(x'+ x, y'+ y) board == Nothing = [] 
      | if pieceAt(x'+ x, y'+ y) board == Just (Piece _ player') && isPlayer player (Piece _ player') == True then (Piece (x',y') player):[] else (Piece _ player'): getLineDir (x,y) (Piece (x'+x, y'+y) player) board 

flippable :: [Piece] -> [Piece] 

私は取得していますエラーメッセージは次のとおりです。

パースエラー(おそらく間違ってインデントまたは不一致括弧)

私はflippable」で始まる行でパースエラーを取得しています"私は前の行と何か間違っていると思っています。

+0

質問にエラーメッセージを追加できますか? –

+0

提案していただきありがとうございます。 –

答えて

1

Just (Piece _ player')のようなパターンで==を使用することはできません。 caseのように適切なパターンマッチングが必要です。あなたはその後player'を必要としませんので、

getLineDir :: (Int, Int) -> Piece -> Board -> [Piece] 
getLineDir (x,y) (Piece (x',y') player) board = 
    case pieceAt (x'+ x, y'+ y) board of 
    Nothing -> [] 
    Just [email protected](Piece _ player') 
    | isPlayer player piece -> [Piece (x',y') player] 
    | otherwise -> piece : getLineDir (x,y) (Piece (x'+x, y'+y) player) board 

はおそらく、Just [email protected](Piece _ player')は単に、Just pieceと交換することができます。

0

次はどうすればいいですか?

getLineDir :: (Int, Int) -> Piece -> Board -> [Piece] 
getLineDir (x, y) (Piece (x', y') player) board 
      | pieceAt(x'+ x, y'+ y) board == Nothing = [] 
      | pieceAt(x'+ x, y'+ y) board == Just (Piece _ player') && isPlayer player (Piece _ player') == True = (Piece (x', y') player) : [] 
      | otherwise = (Piece _ player') : getLineDir (x,y) (Piece (x'+ x, y'+ y) player) board 
関連する問題