Haskell 包实例依赖项

Haskell 包实例依赖项,haskell,Haskell,我正在开发两个包,一个是类,另一个是数据类型。这些包可以单独使用,但当一起使用时,将数据类型作为类的实例是有意义的 有没有一种方法可以定义这种关系而不使一个包依赖于另一个包 这里有一个简单的例子,假设我有一个Car包和一个Print包。有一种方法可以“打印”汽车,但如果我对打印不感兴趣,我应该能够自己使用汽车软件包。同样,如果我对Cars不感兴趣,我应该可以自己使用打印包 是创建第三个包的唯一解决方案,PrintCars,它依赖于前两个包 (我问这个问题的原因是我正在定义一个新类,我想为现有类型

我正在开发两个包,一个是类,另一个是数据类型。这些包可以单独使用,但当一起使用时,将数据类型作为类的实例是有意义的

有没有一种方法可以定义这种关系而不使一个包依赖于另一个包

这里有一个简单的例子,假设我有一个
Car
包和一个
Print
包。有一种方法可以“打印”汽车,但如果我对打印不感兴趣,我应该能够自己使用
汽车
软件包。同样,如果我对
Car
s不感兴趣,我应该可以自己使用打印包

是创建第三个包的唯一解决方案,
PrintCars
,它依赖于前两个包


(我问这个问题的原因是我正在定义一个新类,我想为现有类型(以及我自己的类型)包含许多合理的实例,但我不想依赖于一大堆大的包,也不想为每个组合创建单独的包).

一个实例必须依赖于
Car
类型和
Printable
类,除非可以从
Car
为实例的其他类派生
Printable
。(如果
Printable
被定义为
class Show A=>Printable A
,并且有一个实例
Show Car
,这将是一个非常简单但无用的示例)

您可以在第三个包中定义一个实例
printcar
,但这将是一个

如我链接的页面所述,孤立性的解决方法是创建一个
newtype
,例如:

newtype PrintableCar = PrintableCar Car

instance Print PrintableCar where
    print (PrintableCar car) = ...

现在,要打印汽车,您必须将其包装在
PrintableCar
构造函数中。

这是Haskell软件包管理中经常遇到的未解决问题,我相信每个人都会喜欢一种更好的方法。