haskell 控制语句中的解析错误(可能是缩进不正确或括号不匹配)
haskell parse error (possibly incorrect indentation or mismatched brackets) in control statement
我正在尝试让一些东西工作,它是一个游戏。我遇到了无法跟踪的解析错误。
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]
我收到的错误消息是:
parse error (possibly incorrect indentation or mismatched brackets)
我在以 "flippable" 开头的行收到解析错误,所以我猜前一行有问题。
下面的呢?
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
您不能将 ==
与 Just (Piece _ player')
这样的模式一起使用。您需要像 case
.
一样进行适当的模式匹配
getLineDir :: (Int, Int) -> Piece -> Board -> [Piece]
getLineDir (x,y) (Piece (x',y') player) board =
case pieceAt (x'+ x, y'+ y) board of
Nothing -> []
Just piece@(Piece _ player')
| isPlayer player piece -> [Piece (x',y') player]
| otherwise -> piece : getLineDir (x,y) (Piece (x'+x, y'+y) player) board
可能,Just piece@(Piece _ player')
可以简单地替换为 Just piece
,因为在那之后你永远不需要 player'
。
我正在尝试让一些东西工作,它是一个游戏。我遇到了无法跟踪的解析错误。
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]
我收到的错误消息是:
parse error (possibly incorrect indentation or mismatched brackets)
我在以 "flippable" 开头的行收到解析错误,所以我猜前一行有问题。
下面的呢?
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
您不能将 ==
与 Just (Piece _ player')
这样的模式一起使用。您需要像 case
.
getLineDir :: (Int, Int) -> Piece -> Board -> [Piece]
getLineDir (x,y) (Piece (x',y') player) board =
case pieceAt (x'+ x, y'+ y) board of
Nothing -> []
Just piece@(Piece _ player')
| isPlayer player piece -> [Piece (x',y') player]
| otherwise -> piece : getLineDir (x,y) (Piece (x'+x, y'+y) player) board
可能,Just piece@(Piece _ player')
可以简单地替换为 Just piece
,因为在那之后你永远不需要 player'
。