我有一个涉及类型类的场景,我不太清楚如何去解决它。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是序列化版本 –