Haskell:非具体类型的Num实例

mk1*_*k12 1 haskell types instance typeclass

data Vector a = Vector a a a deriving (Eq, Show)

instance Functor Vector where
    fmap f (Vector x y z) = Vector (f x) (f y) (f z)
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

instance Num ((Num a) => Vector a) where
    negate = fmap negate
Run Code Online (Sandbox Code Playgroud)

不行.我在第一行尝试了很多不同的变化,但GHC一直在抱怨.我想制作一个Vector包含数字的实例Num; 当然这应该是可能的吗?否则,我将不得不作出一个实例Int,Integer,Float,Double,等全部用相同的定义.

sdc*_*vvc 8

instance Num a => Num (Vector a) where
   negate = fmap negate
Run Code Online (Sandbox Code Playgroud)

考虑编写其他方法.

(deriving (Eq, Show, Functor)如果你打开,你可以写-XDeriveFunctor.)

  • 如果你正在猜测并检查那么你可能已经超出了生产力的范围.找到一个可靠的参考将节省大量时间. (3认同)
  • @ Mk12,以及类型类的可靠参考的例子是[LYAH的相应部分](http://learnyouahaskell.com/making-our-own-types-and-typeclasses#typeclasses-102),以及[ RWH](http://book.realworldhaskell.org/read/using-typeclasses.html). (2认同)