Scoped型クラス
今やりたいこと
Pointed型クラスを実装しただけの型がfmap g . pure = pure . gを満たすことを確認したい
その時にQuickCheckを使って明示して、証拠としてそのコードを残しておきたい
そのためにはQuickCheckで任意の関数の自動生成をする必要がある
code:hs
:set -package QuickCheck
import Test.QuickCheck
import Test.QuickCheck.Function
:set -XScopedTypeVariables
:{
| prop_dollarDoesNothing :: Property
| prop_dollarDoesNothing = property $ \(Fn (f :: Int -> Int)) x -> (f $ x) === f x
| :}
quickCheck prop_dollarDoesNothingjjj
めんどくなってきた
QucikCheckで型クラスの定義をするのがめんどい
やり方を知らん
fmap g . pure = pure . gは自明、で済ませていい気がした