Haskellでのエラーの扱い方。あるいはApplicative, Monad等とliftが多くなることについての考え。
- gusmachine
- 5667
- 0
- 6
- 0
@tanakh @nushio その問題は、歴史的な理由だけで生じているわけではありません。現在の Haskell (+GHC 拡張)にはスーパークラスのインスタンスやメソッドを定義する機能がないので、階層化すると modularity が損なわれるのも問題となっています。
2011-04-17 14:00:25@tanakh @nushio あっ、Functor → Applicative → Monad 階層化すれば全ての Monad はApplicative になる(ことを強制させられる)はずですが、
2011-04-17 14:05:43@tanakh @nushio 階層化してしまうと新しく Monad を定義する人は例え必要なくても Applicative → Monad の順番でインスタンスを定義しないといけないて modularity が損なわれてしまうという意味ね。
2011-04-17 14:05:55@tanakh @nushio で、今この辺の問題を解決する為に、スパークラスのデフォルトインスタンスを定義する機能が提案されているわけです。 http://hackage.haskell.org/trac/ghc/wiki/DefaultSuperclassInstances
2011-04-17 14:10:50@tanakh @nushio あっ、Haskell 2010 から Haskell 言語仕様 → ライブラリではなく、ライブラリの変更 Proposal → ライブラリを変更 → Haskell の言語仕様の形で言語仕様にあるライブラリを変更できるようになりました。
2011-04-17 14:14:12@tanakh @nushio ただし、Functor → Applicative → Monad 階層化のように拡張機能を入れる必要のあるものや、例外処理のようにいきなり変えると既存のコードや処理系への影響が大きいものに関しては、変更順序を意識して漸進的にしか変えられませんが。
2011-04-17 14:16:24@tanakh @nushio この辺については、前に行なわれた Prelude の catch や System.IO.Error の catch と try を削除するためにとりあえず非推奨化しようとした時の話が参考になると思います。 http://j.mp/hbVtkd
2011-04-17 14:21:10@tanakh @nushio .。oO(Ticket での議論を読めば特に読む必要はありませんが、私の twitter での言及がこの辺にあります http://twilog.org/tweets.cgi?id=shelarcy&word=catch&date=101227 )
2011-04-17 14:25:10@shelarcy @tanakh なるほど。田中さんも前にエラーの扱いではまってましたね。そもそもmonadiusもcatchか何かが古くなったせいでいまはコンパイルできなくなってたはず。
2011-04-17 15:26:35@shelarcy @tanakh Haskellはまだまだ成長途中の言語なのですね。変更があったら自分もその意味を理解してちゃんと使えるようにしとかないと・・・。
2011-04-17 15:28:15