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) のインスタンスが存在しない故に定義が出来なくなってしまっています。