簡體   English   中英

實例化Haskell中的Num類

[英]instantiate Num class in Haskell

我有Vectorx類,並且想在Num類中使用運算符(*:)重載"dot product"

data Vectorx a = Vectorx a a a 

instance (Num a)=>Num(Vectorx a) where
    (+) ...
    (-) ...
    etc ...
    (*:) (Vectorx x0 y0 z0) (Vectorx x1 y1 z1) = x0*x1 + y0*y1 + z0*z1 

在我看來,我不能在Num實例中添加(*:)運算符

在Java中,我可以添加實現接口或擴展抽象類時想要的任何方法。

任何幫助,將不勝感激。

這是我從建議中得到的更新代碼,但仍然出現“類型錯誤”

data Vectorx a = Vectorx a a a

class Num a => (VectorOp a) where
    (*:)::Num b=> a -> a -> b

instance (Num a) => Num(Vectorx a) where
    (+) _ _ = undefined

instance VectorOp (Vectorx a) where
    (*:) (Vectorx x0 y0 z0) (Vectorx x1 y1 z1) = x0*x1 + y0*y1 + z0*z1

對於您的情況,不適合將Num類作為子類來計算向量的dot product 它只需要將vector的元素約束為number即可:

class DotProduct v where
    (*:)::Num a=>v a ->v a -> a

並將其實例為:

data Vectorx a = Vectorx a a a

instance DotProduct Vectorx where
    (*:) (Vectorx x0 y0 z0) (Vectorx x1 y1 z1) = x0*x1 + y0*y1 + z0*z1

您仍然可以實例化Num來為Vectorx定義(+), (*)或其他操作,但這與上面的DotPoduct類無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM