我有一個涉及類型類的場景,我不太清楚如何去解決它。Haskell類型結構問題
我
class Event a where
timestamp :: a -> UTCTime
rawData :: a -> ByteString
class Something a where
something :: a -> SomethingElse
在我的代碼,我想創建一個實現兩個事件有什麼東西的對象。但是,在某些情況下,某些函數需要從調用rawData返回來構造SomethingElse對象。我在想,如果有來構建這些類型類是能夠建立一個功能類似
convert :: (Event a, Event b, Something b) => a -> b
能夠調用轉換X ::(某些實例),以轉化,有點像如何二進制GET用來。
我意識到這是一個相當模糊的描述,但請讓我知道如果我可以添加任何其他東西。
感謝
我並不完全清楚你」 re要求,但爲了讓'convert'能夠返回任何'Event'&'Something'類型的值,你需要一種方法來構造任何'Event'&'Something'類型的值,同時只知道該類型屬於這兩個類。你可以爲其中一個類提供一個像'unraw :: ByteString - > a'這樣的方法,或者如果這樣的方法需要利用這兩個類的特性,可以創建一個繼承了'Event'和'Something'的新類並具有所需的構造函數。 – jwodder
你必須給'SomethingElse'一些上下文,方式不只是'ByteString'? – Nybble
SomethingElse只是一個反序列化的對象,其中bytestring是序列化版本 –