(https://hackage.haskell.org/package/simple-affine-space-0.1.1/docs/Data-VectorSpace.html#t:VectorSpace), получилость примерно так:
haskell
module Foo where
...
instance VectorSpace (V3 Double) Double where
zeroVector = (V3 0 0 0)
(*^) s (V3 x y z) = (V3 (s*x) (s*y) (s*z))
(^+^) (V3 x y z) (V3 k l m) = (V3 (x+k) (y+l) (z+m))
dot (V3 x y z) (V3 k l m) = (x*k) + (y*l) + (z*m)
...
, но тут я читаю, что orphan instances - это плохо, советуют обернуть в newtype, но я ума не приложу как. Может кто-то подсказать как это должно выглядеть в данном случае?
newtype NV3 a = NV3 { getNV3 :: V3 a } и далее обернуть все вызовы и паттерн-матчи V3 в NV3
Обсуждают сегодня