使用数据类型中的函数派生(Show,Eq)

pau*_*aul -1 haskell

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

data Event =
   BasketCreated{basket:: Basket}
  | ProductAdded{ basket::Basket, addProductInBasket :: Basket -> String -> Int -> Basket}
  | DiscountAdded{ basket::Basket, addDiscountInBasket :: Basket  -> Int -> Basket }
  deriving (Show, Eq)
Run Code Online (Sandbox Code Playgroud)

不幸的是,因为我的数据类型包含函数deriving (Show, Eq)没有编译.

知道如何deriving (Show)使用函数来打印该数据类型

msc*_*idt 7

正如评论中已经提到的,Show如果数据类型包含函数,则无法派生实例.您可以做的最好的事情就是自己实现实例.例如:

instance Show Event where
  show (BasketCreated x)   = "BasketCreated " ++ show x
  show (ProductAdded x _)  = "ProductAdded "  ++ show x
  show (DiscountAdded x _) = "DiscountAdded " ++ show x
Run Code Online (Sandbox Code Playgroud)