やはりVectorを定義することにした

前回はベクトルを[Floating]で済ますことにしたが気が変わって
ベクトルを専用型にすることにした。
正規化されたベクトルをclass型として強制したりするとhaskellっぽいような気がしたので
煩雑なだけかもしれないがやってみる。

Vector.hs

module Vector where

data (Floating f)=>Vector f=Vector [f]

instance (Floating f)=>Show (Vector f) where
  show (Vector vaules)=show vaules

instance (Floating f)=>Eq (Vector f) where
  (==) (Vector lhs) (Vector rhs)=all (\ (l, r)->l==r) $ zip lhs rhs

これを基点に加減算、スカラ積、内積外積を定義する。
class型を継承して正規化ベクトルclass型を定義して使ってみる予定。
効用としては正規化忘れを防げることか。


ついでにHUnitの練習
VectorTest.hs

module VectorTest where
import Test.HUnit
import Vector

main::IO Counts
main=do
  runTestTT $ TestList [
    (TestCase $ assertEqual "Vector==Vector" (Vector [0, 0, 0]) (Vector [0, 0, 0]))
    ]