当前位置:  开发笔记 > 编程语言 > 正文

使用元组时非法实例声明

如何解决《使用元组时非法实例声明》经验,为你挑选了1个好方法。



1> leftaroundab..:

a在你的(a,a)实例中将是一个任意的Num实例.该avmult :: Num a => v -> a -> v什么都不知道这一点,即这可能是任何其他 Num实例.

要使课程成功,你需要

确保数字类型可以相互转换.例如,

class Vector v where
  vplus :: v -> v -> v
  vmult :: RealFrac a => v -> a -> v

instance RealFrac a => Vector (a, a) where
  (a, b) `vplus` (c, d) = (a + c, b + d)
  (a, b) `vmult` m' = (a * m, b * m)
    where m = realToFrac m'

确保标量乘数实际上与向量分量的类型相同.这就是矢量空间库的作用.对于您的代码,它将采用表单

{-# LANGUAGE TypeFamilies, FlexibleInstances #-}

class Vector v where
  type Scalar v :: *
  vplus :: v -> v -> v
  vmult :: v -> Scalar v -> v

instance Num a => Vector (a, a) where
  type Scalar (a,a) = a
  (a, b) `vplus` (c, d) = (a + c, b + d)
  (a, b) `vmult` m = (a * m, b * m)

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有