私は、型のクラスを含むシナリオを持っていますが、私はそれを解決する方法についてはあまりよく分かりません。Haskell typeclass階層の問題
私は私のコードで
class Event a where
timestamp :: a -> UTCTime
rawData :: a -> ByteString
class Something a where
something :: a -> SomethingElse
を持って、私はイベントや何かの両方を実装するオブジェクトを作成したいです。しかし、場合によっては、SomethingElseオブジェクトを構築するためにrawDataへの呼び出しからの戻りが必要になることがあります。 Xを変換呼び出すことができること
convert :: (Event a, Event b, Something b) => a -> b
のような機能を構築することができるように、これらの型クラスを構造化することがあった場合、私は思っていた::(何かのインスタンス)に変換するためには、どのようにバイナリ取得のようなビット使用されている。
私はこれがかなり曖昧な記述であることを認識していますが、他に何か追加できるかどうか教えてください。型クラスで
おかげ
私はあなたが「何を完全には明らかではありませんよしかし、 'convert'が' Event'と 'Something'型の値を返すためには' Event'と 'Something'型の値を構築する方法が必要ですその型はその2つのクラスに属します。クラスの1つに 'unraw :: ByteString - > a'のようなメソッドを与えることもできますし、何らかの理由で両方のクラスの機能を利用する必要がある場合は、' Event'と 'Something'の両方を継承する新しいクラスを作りましょう所望のコンストラクタを有する。 – jwodder
あなたは 'SomethingElse'にいくつかの文脈を与えなければなりません。ちょうど' ByteString'ではなく? – Nybble
かなり多くのSomethingElseは、バイトストリームがシリアライズされたバージョンであるデシリアライズされたオブジェクトです。 –