Haskell 使用数据类型中的函数派生(显示、等式)

Haskell 使用数据类型中的函数派生(显示、等式),haskell,Haskell,我有一些数据类型,作为一个参数,我有函数 data Event = BasketCreated{basket:: Basket} | ProductAdded{ basket::Basket, addProductInBasket :: Basket -> String -> Int -> Basket} | DiscountAdded{ basket::Basket, addDiscountInBasket :: Basket -> Int ->

我有一些数据类型,作为一个参数,我有函数

data Event =
   BasketCreated{basket:: Basket}
  | ProductAdded{ basket::Basket, addProductInBasket :: Basket -> String -> Int -> Basket}
  | DiscountAdded{ basket::Basket, addDiscountInBasket :: Basket  -> Int -> Basket }
  deriving (Show, Eq)
不幸的是,由于我的数据类型包含函数
派生(Show,Eq)
没有编译


如果想知道如何使用函数导出(显示)以打印该数据类型,请参见注释中的说明,如果您的数据类型包含函数,则无法导出
Show
实例。您所能做的最好的事情就是自己实现这个实例。例如:

instance Show Event where
  show (BasketCreated x)   = "BasketCreated " ++ show x
  show (ProductAdded x _)  = "ProductAdded "  ++ show x
  show (DiscountAdded x _) = "DiscountAdded " ++ show x

没有函数的
Show
实例。无法作为
Show
实例的原因,请参考:

您计划如何打印函数?您只是想不显示它们,还是为函数打印一些占位符字符串?我不介意不显示请参见:谢谢链接。我会保留这张票作为参考。如果你愿意回答,我会将问题标记为已回答。如果有用,我会将其作为答案张贴,供其他人稍后参考。