Haskell:Algebric数据类型,其类型变量需要是类型类的实例

时间:2009-08-23 17:20:22

标签: haskell types polymorphism typeclass

我正在尝试定义代数类型:

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的实例?

3 个答案:

答案 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