首页 > 解决方案 > 用数据类型中的函数推导 (Show, Eq)

问题描述

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

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

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

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

标签: haskell

解决方案


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

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

推荐阅读