假设我有一个类型声明:
data MyType = N Double | C Char | Placeholder
我希望能够尽可能将 MyType 视为 Double,所有 Num、Real、Fractional 函数导致 N(正常结果)用于包装在 N 构造函数中的参数,以及占位符用于其他参数
> (N 5.0) + (N 6.0)
N 11.0
> (N 5.0) + (C 'a')
Placeholder
除了以类似于以下方式简单地将此类定义为这些类的实例之外,还有其他方法可以做到这一点:
instance Num MyType where
(+) (N d1) (N d2) = N (d1+d2)
(+) _ _ = Placeholder
...
(这似乎适得其反)?