繁体   English   中英

Haskell:派生自其他类型类的类型类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM