Я не совсем уверен, что я делаю не так:
data Vector2D u = Vector2D {
_x :: u,
_y :: u
} deriving stock (Show, Eq, Functor, Foldable, Traversable)
{-# INLINE addVector2 #-}
addVector2 :: (Additive a) => Vector2D a -> Vector2D a -> Vector2D a
addVector2 (Vector2D { _x = x1, _y = y1 }) (Vector2D { _x = x2, _y = y2 }) =
Vector2D { _x = x1 + x2, _y = y1 + y2 }
instance (Additive a) => Additive (Vector2D a) where
(+) = addVector2
newtype Square a = Square {
unpackSquare :: Vector2D a
} deriving stock (Show, Eq)
Пока все нормально (Аддитив определен в пакете алгебры, но довольно понятен).
Однако, теперь я хочу быть умным, используя DerivingVia и StandaloneDeriving, и я даже не могу получить следующую строку для компиляции
deriving instance (Additive a) => Additive (Square a) via (Vector2D a)
Но это заставляет меня
* Expected kind `k0 -> * -> Constraint',
but `Additive (Square a)' has kind `Constraint'
* In the stand-alone deriving instance for
`(Additive a) => Additive (Square a) via (Vector2D a)'
Можеткто нибудь подскажет что я делаю не так?Я использую GHC 8.6.2