kakkun61
cabal.project.local に相当するような stack.yaml のやつってありますか?
... Replies ...
class Typeable a => T a where typeT :: Int encode :: T -> ByteString decode :: ByteString -> T fromTLV :: TLV -> Maybe a -- TLVは後述 fromTLV (TLV x) = cast x toTLS :: a -> TLV toTLS = TLV
data A = A ... data B = B ... instance A where typeT = 0 encode = ... decode = ... instance B where typeT = 1 encode = ... decode = ...
ExistentialQuantification
を用いて、以下の型を定義します。data TLV = forall a. T a => TLV a
a
が与えられるので簡単です。encodeTLV :: TLV -> ByteString encodeTLV (TLV x) = encode x
ByteString
に符号化された整数なので、それをパースして V の部分の ByteString
を切り出した後に、適切な decode
を呼ぶだしたいのですが、どうすれば呼べるでしょうか?Int -> ByteString
の辞書を用意して、それを引くことです。拡張可能にするのは、この辞書を公開し、利用時に要素を追加可能にする必要がありそうです。data C
を定義したら、自動的にその decode
も呼ばれるような魔法はあるのでしょうか?Arbitrary
インスタンスを作成しようと考えています。 Arbitrary
インスタンスをどこに書くのが良いのかで悩んでいます。Arbitrary
インスタンスを使えるようにしたいので、テストコード側ではなくライブラリ側に書きたいと考えています。data AppModel = AppModel { _typing :: Text , _candidates :: Zipper Candidate , _configFile :: FilePath , _matcher :: (T.Text -> T.Text -> Bool) -- ^ ここのこと } deriving (Eq)
AppModel
はUIライブラリ(Eq
インスタンスを持つ必要があるのですが、 Eq (a -> a)
のインスタンスが存在しない故に定義が出来なくなってしまっています。