簡體   English   中英

如何處理類成員函數中的類型類約束

[英]How to deal with typeclass constraint in class member function

GHCI抱怨的類型ka內部(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)

問題是您的mul簽名表示v可以乘以具有Num實例的任何類型kIntDoubleComplex Double等。

但是對於向量空間,你想要一些非常不同的東西:說每個v都有一個特定的k 這可以通過兩種方式完成(在按照評論中的建議修復data Point x = Point xx ):

  1. 使用具有函數依賴的多參數類型類;

  2. 使用關聯類型

我最初給出了使用兩者的解決方案,但閱讀鏈接的文檔並自己嘗試可能會更有幫助。

暫無
暫無

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

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