Передача конструкторов и данных в качестве аргументов в Haskell
Я пытаюсь создать небольшой инструмент проверки ошибок для игры, над которой я работаю, и я не уверен, как передавать типы данных в качестве аргументов. вот что я пытаюсь сделать, это файл, в котором мои аргументы данных
-- | Represents the type of move played in a 'GameState'.
data Played = Played ((Int, Int), (Int, Int)) -- ^ A "normal" move.
| Passed -- ^ A (legal) pass.
| Goofed ((Int, Int), (Int, Int)) -- ^ An illegal move, penalty applied.
| Init -- ^ No one has moved yet.
| UpgradedPawn2Knight (Int,Int) -- ^ A pawn reached the other side when <2 knights.
| PlacedPawn ((Int, Int), (Int, Int)) -- ^ A pawn that's been placed in any empty space after having reached the far end of the board.
| BadPlacedPawn ((Int, Int), (Int, Int)) -- ^ A strategy has attempted to do a pawn placement, but chose an invalid location.
И вот мой код пытается реализовать функцию, основанную на этих состояниях игры
prevPenalty :: Played -> Int
prevPenalty Init = 0
prevPenalty Goofed ((a, b),(c, d)) = 1
prevPenalty Passed ((a, b),(c, d)) = 0
currentPenalty :: Played -> Int
currentPenalty Goofed ((a, b),(c, d)) = 1 + prevPenalty
currentPenalty Passed ((a, b),(c, d)) = 0 + prevPenalty
Тем не менее, во время компиляции эта ошибка появляется
Penalty.hs:22:1:
Equations for ‘prevPenalty’ have different numbers of arguments
Penalty.hs:22:1-20
Penalty.hs:23:1-38
Penalty.hs:28:1:
Couldn't match expected type ‘t0 -> t1’ with actual type ‘Int’
The equation(s) for ‘currentPenalty’ have two arguments,
but its type ‘Played -> Int’ has only one
Я не могу понять, как еще это исправить... У кого-нибудь есть предложения?