Haskellでいつもimportしてるモジュールを聞いてみた

@kazu_yamamoto さんは 以前に Applicative のススメ (http://d.hatena.ne.jp/kazu-yamamoto/20101211/1292021817) を書いていますね。 Real World Haskell にも Applicativeが出てくるそうです。 @ranha さんはデバッグのためにDebug.Traceのほか、GADTを使った依存型プログラミングのときに出る型エラーをとりあえず強引に迂回するときに Unsafe.Coerceをよく使うみたい(多分)。 お二人ともありがとうございました! 他にもあれば追記orコメントください
3
Keigo Imai @keigoi

【ゆる募】Haskell使いの皆さんに質問です。 Prelude以外にいつもインポートするモジュールを教えて下さい。 例えば、Control.Monad, Data.Maybe あたりはよく使う気がします。qualified 付きか無しかも含めておねがいします。

2011-12-02 10:48:06
Keigo Imai @keigoi

場合によっては Data.List, Control.Arrow とかも? あとなんだろう。 ナンセンスor既出な質問だろうか…。

2011-12-02 10:49:51

kazu_yamamoto さんが答えてくれました

山本和彦 @kazu_yamamoto

.@keigoi Control.Applicative は外せませんね。

2011-12-02 10:54:59
Keigo Imai @keigoi

@kazu_yamamoto なるほど、ありがとうございます! 私は使いこなせてなかったです。精進します。。

2011-12-02 11:00:45
山本和彦 @kazu_yamamoto

.@keigoi do val <- m; let val' = func val と書いてあったら、迷わず do val <- func <$> m とすると吉です。変数が減るので、それだけバグも入り込みにくくなります。

2011-12-02 11:11:47
Keigo Imai @keigoi

@kazu_yamamoto do val <- liftM func val; をよく使っていたのですが、 慣れれば <$> のほうが直観的ですね。

2011-12-02 11:15:12
山本和彦 @kazu_yamamoto

.@keigoi liftM と fmap を区別するのはバカらしいですよ。数学的には同じものなので。liftM だと引数が増えるたびに、名前を変えないといけませんし。

2011-12-02 11:23:10
Keigo Imai @keigoi

@kazu_yamamoto あんまり専用の演算子を増やすのが好きでないのですが、イディオムだと思えば…ですね。 勉強させていただきます http://t.co/Ee6lfD1y

2011-12-02 11:28:23
山本和彦 @kazu_yamamoto

.@keigoi liftM、liftM2、liftM3 と関数が増えていく方が問題では? Applicative なら、基本的に <$> と <*> だけです。<$、<*、*> とかも使いますけど。

2011-12-02 11:30:46

@ranha さんが答えてくれました

Üe🦀 @ranha

System.IO.Unsafe と Unsafe.Coerce

2011-12-02 11:03:48
Üe🦀 @ranha

あとはDebug.Traceとかかなぁ

2011-12-02 11:08:16
Üe🦀 @ranha

@keigoi ぼくそんなHaskellを神聖視してないのでギョームとかでなければガンガン使います…

2011-12-02 11:14:27
Üe🦀 @ranha

【重点】そもそもギョームでHaskell書いた事無いですがあんま調子乗ったこと書くとギョームで使ってる人に刺されるらしいですしまぁぼくそんな大したプログラム書けないのでどだい皆様のHaskell界隈を汚すつもりは無いです

2011-12-02 11:15:46
Keigo Imai @keigoi

@ranha unsafePerformIO はわかるんですけど、 unsafeCoerce 使う場面ってちょっとすぐに想像つかなくて楽しそう

2011-12-02 11:16:39
Keigo Imai @keigoi

Coq→HaskellのextractするとunsafeCoerceが入る(はず)けど、自分で書く事はあんまりないかも。一度気の迷いでランクN多相を使ったとき、なぜか型が合わなくて強行突破したことはある。あとは存在型に値をぶち込んだ時、取り出すにはunsafe要るか

2011-12-02 11:18:46
Keigo Imai @keigoi

いやランク2多相はモナドで使うか…

2011-12-02 11:23:55
Üe🦀 @ranha

@keigoi 一日何回も使います!とかそんなことでは無いですが… 例えばTypeable使うの面倒くさいとか、迂回策色々ある時でもバッと使っちゃうので、大体なんとかなる場合ですかね。 もう本当に使わざるを得ない かつ 面白かったケースで記憶に残ってるのない感じすらありますが。

2011-12-02 11:28:08
Keigo Imai @keigoi

@ranha Typeable使うの面倒くさい、はわかる気がしますね

2011-12-02 11:30:32
Üe🦀 @ranha

GADTs使ってfake dependent typeしつつ証明書く + 実行してちゃんと値が欲しい(のでundefinedはダメ) 時とかは諦めて書きますけどこれはちょっと状況が状況というか頭の悪さの露呈してるだけなのでダメとして後は何かなぁ

2011-12-02 11:33:00

追記。ありがとうございます!