我正在尝试定义代数类型:
data MyType t = MyType t
并使其成为Show:
的实例instance Show (MyType t) where
show (MyType x) = "MyType: " ++ (show x)
GHC抱怨因为它无法推断'Show(MyType t)'中的类型't'实际上是Show的实例,这是(show x)所需的。
我不知道在哪里以及如何声明't'是Show的实例?
答案 0 :(得分:19)
在t
的类型上添加类型约束:
instance Show t => Show (MyType t) where
show (MyType x) = "MyType: " ++ (show x)
答案 1 :(得分:15)
您也可以:
data MyType t = MyType t
deriving Show
如果你想要一个常规的节目格式。
答案 2 :(得分:2)
另一个解决方案是使用GADT:
data MyType t where
MyType :: Show a => a -> MyType a