GHCI жалуется на типы k и a внутри (k * a, k * b). Я предполагаю, что он не знает, что k является Num, но я не знаю, как это указать.
module Point where
data Point x y = Point (x, y)
class Vector v where
add :: v -> v -> v
sub :: v -> v -> v
mul :: Num k => k -> v -> v
instance (Num a, Num b) => Vector (Point a b) where
add (Point (a, b)) (Point (c, d)) = Point (a + c, b + d)
sub (Point (a, b)) (Point (c, d)) = Point (a - c, b - d)
mul k (Point (a, b)) = Point (k * a, k * b)
aиbявляются одним и тем же типом. В Haskell операнды(+),(-),(*)и т. д. имеют один и тот же тип.(+) :: Int -> Double -> Doubleнет. - person Willem Van Onsem   schedule 08.10.2018xиy, но и дляkиxи, следовательно,kиy. - person Willem Van Onsem   schedule 08.10.2018data Point x y = Point x yили (лучше)data Point x = Point x xдостаточно. - person chepner   schedule 08.10.2018k,xиyдолжны быть одного типа? - person Brady Dean   schedule 08.10.2018data Point x = Point x xговорит, чтоPointимеет два значения одного и того же типа (и этот тип —x). - person MathematicalOrchid   schedule 09.10.2018