Skip to content

Commit 5c647ff

Browse files
committed
Fix: Quickcheck -> QuickCheck and unexpected escaping of backquote
1 parent ee21e30 commit 5c647ff

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

preprocessed-site/posts/2020/property-io.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ tags:
1414

1515
# 📣`shouldBe`などは`property`の中でも使えるので使ってください!
1616

17-
みなさんはHspecでQuickcheckを使ったProperty testを書く際、どのように書いているでしょうか?
17+
みなさんはHspecでQuickCheckを使ったProperty testを書く際、どのように書いているでしょうか?
1818
例えばHspecのマニュアル https://hspec.github.io/quickcheck.html のように、Hspecにproperty testを組み込む例として、次のような例を挙げています。
1919

2020
```haskell
@@ -101,7 +101,13 @@ QuickCheckやHspecのドキュメントをつぶさに読んだことがある
101101
QuickCheckの[`property`関数は、`Testable`という型クラスのメソッド](http://hackage.haskell.org/package/QuickCheck-2.13.2/docs/Test-QuickCheck.html#t:Testable)であるため、`Testable`のインスタンスでなければ使えないはずです。
102102
Hspecの`shouldBe`などが返す値は型シノニムのたらい回しをたどればわかるとおり、結局のところ`IO ()`型の値です。
103103
ところが`Testable`のインスタンス一覧を見る限り、`IO a``Testable`のインスタンスではありません。
104-
先ほどの例のように`property $ \x -> (read . show) x ``shouldBe`` (x + 1 :: Int)`と書いた場合における、関数型`(a -> prop)`のインスタンスは、`(Arbitrary a, Show a, Testable prop) => Testable (a -> prop)`という定義のとおり、関数の戻り値の型が`Testable`のインスタンスでないと、型チェックを通らないはずです。
104+
先ほどの例のように
105+
106+
```haskell
107+
property $ \x -> (read . show) x `shouldBe` (x + 1 :: Int)
108+
```
109+
110+
と書いた場合における、関数型`(a -> prop)`のインスタンスは、`(Arbitrary a, Show a, Testable prop) => Testable (a -> prop)`という定義のとおり、関数の戻り値の型が`Testable`のインスタンスでないと、型チェックを通らないはずです。
105111
`Testable`のインスタンスでない、`IO ()`を返しているにも関わらず型エラーが起きなかったのは、一体なぜでしょうか?
106112

107113
その秘密を探るべく、GHCiを立ち上げましょう。

0 commit comments

Comments
 (0)