У меня есть класс Movable
и несколько типов данных, которые создают этот класс.Я хочу создать универсальную функцию перемещения для всех этих классов, как я сделал ниже, но, очевидно, мой синтаксис записи неверен, так как я получаю следующую ошибку:
src\Controller.hs:24:13: error:
* `position' is not a record selector
* In the expression: o {position = (x', y')}
In an equation for `move':
move o
= o {position = (x', y')}
where
(x, y) = position o
(vx, vy) = velocity o
x' = x + vx
y' = y + vy
|
24 | move o = o {position = (x', y')}
| ^^^^^^^^
Я пытался применить этот StackOverflow answer , но я не получил его на работу. Как это исправить?Или есть другие способы использования синтаксиса записей для решения этой проблемы? Здесь вы можете увидеть мой код:
type Position = (Float, Float)
type Velocity = (Float, Float)
class Movable m where
position :: m -> Position
velocity :: m -> Velocity
data Player = Player {
playerBulletType :: Bullet,
playerHealth :: Health,
playerMaxVelocity :: MaxVelocity,
playerVelocity :: Velocity,
playerPosition :: Position,
playerSprite :: Sprite
}
instance Movable Player where
position = playerPosition
velocity = playerVelocity
move :: Movable o => o -> o
move o = o {position = (x', y')}
where (x, y) = position o
(vx, vy) = velocity o
x' = x + vx
y' = y + vy