data Vector a = Vector a a a deriving (Show) -- Vector a a a -> Vector a a a -> a は間違い vplus :: (Num a) => Vector a -> Vector a -> Vector a (Vector i j k) `vplus` (Vector l m n) = Vector (i+l) (j+m) (k+n) dotProd :: (Num a) => Vector a -> Vector a -> a (Vector i j k) `dotProd` (Vector l m n) = i*l + j*m + k*n vmult :: (Num a) => Vector a -> a -> Vector a (Vector i j k) `vmult` m = Vector (i*m) (j*m) (k*m) -- *Main> Vector 3 5 8 `vplus` Vector 9 2 8 -- Vector 12 7 16 -- *Main> Vector 3 5 8 `vplus` Vector 9 2 8 `vplus` Vector 0 2 3 -- Vector 12 9 19 -- *Main> Vector 3 9 7 `vmult` 10 -- Vector 30 90 70 -- *Main> Vector 4 9 5 `dotProd` Vector 9.0 2.0 4.0 -- 74.0 -- *Main> Vector 2 9 3 `vmult` (Vector 4 9 5 `dotProd` Vector 9 2 4) -- Vector 148 666 222