[英]Haskell: typeclass deriving from other typeclass
假设我有一个保存在数据库中的实体的类型类。 一些简化的示例可能看起来像这样:
class Persistent a where
fetch :: Int -> IO (Maybe a)
store :: a -> IO Bool
现在,我发现对于store
我可能需要了解实体的类型,因此它也应该是Typeable
。
是否有某种方法可以说明所有Persistent
实体都是可Typeable
而无需在每个特定的data
子句中添加deriving (Typeable)
? 例如:
class Persistent a deriving (Typeable) where
fetch :: Int -> IO (Maybe a)
store :: a -> IO Bool
不,这是不可能的。
在class Persistent a
,a不必表示数据类型声明。 这只是一种。 例如,可以为Maybe Integer
添加一个Persistent
实例。
instance Persistent (Maybe Integer) where ...
因此,它并没有太大的意义谈“添加deriving (Typeable)
条款向所有a
碰巧为S Persistent
”。 不能说data Maybe Integer deriving Typeable
或类似的东西。
如果您完全确定每个Persistent
事物都必须是Typeable
,则可以向Persistent
类添加约束 :
class Typeable a => Persistent a where ...
但是,这对Typeable
自动派生没有任何帮助。 它仅要求每个Persistent
实例都应该有一个Typeable
实例,您仍然必须以一种或另一种方式来产生自己(例如,通过将deriving (Typeable)
添加到所有相关的数据类型)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.