簡體   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