Haskell 默认超类实例

发布于 2024-11-04 20:26:13 字数 713 浏览 7 评论 0原文

我想从一些自定义类的 Num 声明中取出一些样板文件(称为单项式和多项式)。而不是写

instance Num (Monomial) where
    f - g = f + (negate g)
    abs _ = undefined

有没有办法解决这个问题?我遇到了 默认超类实例 和名为“strathclyde haskell 增强" 如果实现的话可能会让我写一些类似的东西,

class SimpleNum a => Num a where
    (+) :: a -> a -> a -- standard ring stuff
    (*) :: a -> a -> a
    one :: a
    zero :: a
    instance Num (SimpleNum a) where
        f - g = f + (negate g)
        abs _ = undefined

什么是通常/简单的处理方法?

I want to take some of the boilerplate out of Num declarations for a few custom classes (call them Monomial and Polynomial). Instead of writing

instance Num (Monomial) where
    f - g = f + (negate g)
    abs _ = undefined

Is there a way to get around this? I came across default superclass instances and something called "the strathclyde haskell enhancement" which if implemented might let me write something like,

class SimpleNum a => Num a where
    (+) :: a -> a -> a -- standard ring stuff
    (*) :: a -> a -> a
    one :: a
    zero :: a
    instance Num (SimpleNum a) where
        f - g = f + (negate g)
        abs _ = undefined

What's the usual / simple way of dealing with this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾城°AllureLove 2024-11-11 20:26:13

处理此问题的常用方法是至少执行以下一项或多项操作:

  1. 多发牢骚。

  2. 像这样编写辅助函数:

simpleMinus f g = f + (negate g)
  1. 使用诸如 Template Haskell 之类的工具派生

  2. 尝试实现您提到的扩展。 (不幸的是,这并不像您想象的那么容易。)

The usual ways of dealing this is to do at least one or more of the following:

  1. Grumble a lot.

  2. Write helper functions like this:

simpleMinus f g = f + (negate g)
  1. Use tools like Template Haskell and Derive.

  2. Attempt to implement extensions like the one you mention. (This unfortunately not as easy as you might think.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文