haskell-ja > Archives > 2013/01/13

2013/01/13 06:42:57 UTCnushio
#
quickcheckで、このコードはTypecheckする、という性質を書くにはどうしたらいいのでしょう?
#
逆にTypecheckしない、という性質はかけます?
2013/01/13 07:28:56 UTCikegami__
#
nushio さんの最初の質問の意味をまだ理解していません。なにか例はありませんか
#
ghc は型検査を実行時に延期するという(実際ヒドイ!)ことはできます : http://hackage.haskell.org/trac/ghc/wiki/DeferErrorsToRuntime
2013/01/13 07:37:54 UTCikegami__
#
うーん、ボクは的外れなことを言っているな、すみません
2013/01/13 07:45:36 UTCshiro
#
「使わない限り型エラーでも無問題!」 うわーまるでLispみたい! > DeferErrorsToRuntime
2013/01/13 08:25:30 UTCnushio
#
あっお返事がついている、ありがとうございます
#
http://hackage.haskell.org/package/unittyped
#
こういう、物理次元付き演算を型レベルで表現するライブラリを作っているので、
#
たとえばmeter + secondという式はコンパイル時エラーになるよ
#
という性質をQuickCheckで書きたいのです
#
書けたらいいなーっておもいまして。
#
https://bitbucket.org/xnyhps/haskell-unittyped/src/b984244375870f682ccae20ce3b0ef6e91bff74d/tests/SISpec.hs?at=default
#
今のテストはこんな感じ
#
kazu山本さんのアドベントカレンダー記事が役に立った
#
ありがたし
2013/01/13 08:42:53 UTCikegami__
#
IRC freenode #haskell にも欧米人がアクティブな時間に質問を投げればいいと思う…動機はわかりました
#
project/test/fail というディレクトリに失敗例を集めて Makefile でやっつける方法がありますが…あまり嬉しくはないな。Agda2 はそうしています
2013/01/13 08:48:49 UTCnushio3
#
ありがとうございました
2013/01/13 08:48:52 UTCikegami__
#
meter + second は型エラーなので ghc はテスト工程を行う前に文句をいうのですよね?
2013/01/13 08:49:00 UTCnushio3
#
そうですねえ
#
それを服務Haskellコードは通常コンパイルできない
#
です。
#
あ、doctestなら表現るなあ
#
REPLのエラーメッセージをいちいち書き写さないといけないのでちょっと不安ですけどね。
2013/01/13 08:52:11 UTCikegami__
#
ghc のバージョンが変わるとメッセージが変わる可能性があるので悲しそうな解決法っぽい…
2013/01/13 08:54:07 UTCnushio3
#
はい、悲しむ姿が容易に想像できます
#
project/test/fail式が良さそうです
#
chatonはIRCと違って過去ログも見れるしよいですね
2013/01/13 08:56:05 UTCikegami__
#
meter + second みたいな ill-typed な皆さんは正常なコード達と隔離したほうがいいし、どういうテストを行うかによらず、隔離所 project/test/fail が必要です
#
Makefile はどうかなと思った.
#
Cabal のしくみでどうにかならないかなあ
#
IRC freenode #haskell は過去ログが自動的に収集されてます : http://www.haskell.org/haskellwiki/IRC_channel#Logs
#
chaton はありがたいです、なんにせよ
2013/01/13 09:03:55 UTCkonn
#
defer-type-errors とかとうまく組み合わせてうまくいきませんかね? http://t.co/M3971Xde
2013/01/13 09:06:13 UTCikegami__
#
defer-type-errors は ghc 7.6.1 から使えるので、まあそのバージョンにするとして…
#
defer-type-errors でなにかするなら、アホなコード meter + second をあえて意図的に書いてコンパイルはできて、しかし実行時に crash するので、それをつかまえる
#
テスト的には意図的な crash が起きましたよ、という報告をプログラマに優しく伝える仕組みが欲しい
2013/01/13 09:09:48 UTCnushio3
#
shouldThrowをつかえば飯井か
2013/01/13 09:14:07 UTCikegami__
#
できんことはないような気がしてきました、こんさん天才
2013/01/13 09:14:59 UTCnushio3
#
うむ、しかしコンパイラフラグだから、
#
しかもHSpecつかってテスト1つにまとめてるから
#
ぜんたいがdeferしてしまうな
#
だけ
#
落ちるテストだけは別に書くか
2013/01/13 09:17:40 UTCikegami__
#
別に書いて、かつプラグマ {-# OPTIONS_GHC -fdefer-type-errors #-} をつけるのでいけそう
2013/01/13 09:19:20 UTCnushio3
#
あれ、
#
そうか、そのプラグマはモジュール単位でつく?
#
だったらspecはつかえそう
#
すまぬ、hspec-discoverがつかえそうだなって。
2013/01/13 09:21:55 UTCnushio3
#
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
2013/01/13 09:21:58 UTCnushio3
#
ぐぬぬ
2013/01/13 09:22:24 UTCikegami__
#
ワロス
2013/01/13 09:24:12 UTCnushio3
#
https://bitbucket.org/xnyhps/haskell-unittyped/src/fc4087636e8b9654c99ce10cc01e42f4da08ae36/tests/TypeErrorSpec.hs?at=default
#
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 #-}
#
つきで、こんなスペック書いてみたんだがなあ