#quickcheckで、このコードはTypecheckする、という性質を書くにはどうしたらいいのでしょう?
#逆にTypecheckしない、という性質はかけます?
#nushio さんの最初の質問の意味をまだ理解していません。なにか例はありませんか
##うーん、ボクは的外れなことを言っているな、すみません
#「使わない限り型エラーでも無問題!」 うわーまるでLispみたい! > DeferErrorsToRuntime
#あっお返事がついている、ありがとうございます
##こういう、物理次元付き演算を型レベルで表現するライブラリを作っているので、
#たとえばmeter + secondという式はコンパイル時エラーになるよ
#という性質をQuickCheckで書きたいのです
#書けたらいいなーっておもいまして。
##今のテストはこんな感じ
#kazu山本さんのアドベントカレンダー記事が役に立った
#ありがたし
#IRC freenode #haskell にも欧米人がアクティブな時間に質問を投げればいいと思う…動機はわかりました
#project/test/fail というディレクトリに失敗例を集めて Makefile でやっつける方法がありますが…あまり嬉しくはないな。Agda2 はそうしています
#ありがとうございました
#meter + second は型エラーなので ghc はテスト工程を行う前に文句をいうのですよね?
#そうですねえ
#それを服務Haskellコードは通常コンパイルできない
#です。
#あ、doctestなら表現るなあ
#REPLのエラーメッセージをいちいち書き写さないといけないのでちょっと不安ですけどね。
#ghc のバージョンが変わるとメッセージが変わる可能性があるので悲しそうな解決法っぽい…
#はい、悲しむ姿が容易に想像できます
#project/test/fail式が良さそうです
#chatonはIRCと違って過去ログも見れるしよいですね
#meter + second みたいな ill-typed な皆さんは正常なコード達と隔離したほうがいいし、どういうテストを行うかによらず、隔離所 project/test/fail が必要です
#Makefile はどうかなと思った.
#Cabal のしくみでどうにかならないかなあ
##chaton はありがたいです、なんにせよ
#defer-type-errors とかとうまく組み合わせてうまくいきませんかね? http://t.co/M3971Xde #defer-type-errors は ghc 7.6.1 から使えるので、まあそのバージョンにするとして…
#defer-type-errors でなにかするなら、アホなコード meter + second をあえて意図的に書いてコンパイルはできて、しかし実行時に crash するので、それをつかまえる
#テスト的には意図的な crash が起きましたよ、という報告をプログラマに優しく伝える仕組みが欲しい
#shouldThrowをつかえば飯井か
#できんことはないような気がしてきました、こんさん天才
#うむ、しかしコンパイラフラグだから、
#しかもHSpecつかってテスト1つにまとめてるから
#ぜんたいがdeferしてしまうな
#だけ
#落ちるテストだけは別に書くか
#別に書いて、かつプラグマ {-# OPTIONS_GHC -fdefer-type-errors #-} をつけるのでいけそう
#あれ、
#そうか、そのプラグマはモジュール単位でつく?
#だったらspecはつかえそう
#すまぬ、hspec-discoverがつかえそうだなって。
#Finished in 0.0012 seconds
4 examples, 1 failure
Test suite spec: FAIL
Test suite logged to: dist/test/unittyped-0.2-spec.log
Test suite doctest: RUNNING...
doctest: Ouch! Hit an error thunk in GHC's AST while extracting documentation.
GHC panic: mkHsTyWithBndrs:kvs
This is most likely a bug in doctest.
Please report it here: https://github.com/sol/doctest-haskell/issues/new
Test suite doctest: FAIL
#ぐぬぬ
#ワロス
##spec :: Spec
spec = do
describe "SI units typecheck Test" $ do
it "detects addition between wrong units." $ do
print (meter+second) `shouldThrow` anyException
#{-# OPTIONS_GHC -fdefer-type-errors #-}
#つきで、こんなスペック書いてみたんだがなあ