scalazにおけるimplicit parameterの命名規則
Scala質問: def f[A](A: Monoid[A])における, 2番目のAは型を表してるの?例えばIntとか
2015-06-12 07:43:10つ目のAと, 2つ目のAは関係がない・・・2つ目のがIntならば, 1つ目はMonoid[Int]のインスタンスですよと言ってるだけか
2015-06-12 07:50:03@gakuzzzz Thanks. やっぱそうですよね. 紛らわしいのでmaとか書けばいいのにーと思いました.
2015-06-12 14:51:16@writeboostguy 全く同意ですね。この辺 Scalaz でもFPinScalaのような命名規則なんですが、github.com/scalaz/scalaz/… 個人的にはこれは Haskell 文化圏から引き継いだ悪しき風習な気がしています。単純に読み辛い……。
2015-06-12 15:00:58@gakuzzzz 型が再帰してるように見えて混乱します. Scalaって型を引数にとれるのか?とも思いました. 文化なので改善は無理そうですね. 慣れ従うしかりません.
2015-06-12 15:03:08@writeboostguy 慣れは多分にありそうですねー。ただまぁScalaコミュニティ全体がそういう文化という訳でもなさそうなので、この辺はよりよい提案を出して行けば受け入れられる余地はあるように思ってます
2015-06-12 15:05:58@gakuzzzz @writeboostguy Haskellではそもそも型クラスのインスタンスの実体はScalaみたいなオブジェクトとして存在しないので、(名前つける行為自体を避けるため)型クラスのインスタンスは型と同じ名前にするというのはある意味Scalaz独自の慣習ですね
2015-06-12 15:07:33@xuwei_k @writeboostguy あーそれはそうなんですけど、例えば liftM :: (Monad m) => (a -> b) -> m a -> m b liftM f m = m >>= (\x -> return (f x))
2015-06-12 15:12:20@xuwei_k @writeboostguy の m a 型の変数にmとつける、とか個人的にHaskellの読み辛さはこういう所か来てるように感じてて、Scalazのそのルールはそれを引き継いでる様に感じてます。
2015-06-12 15:12:30@gakuzzzz @writeboostguy 名前付け避けれる機械的な命名規則ならなんでも良かったんでしょうけど(順番にev1とかev2とか)scalaz7のプロトタイプ作った人がその規則をドキュメントに書いて(別にみんなこだわりないので)それに従うようになって今に至ってます
2015-06-12 15:13:20@gakuzzzz @writeboostguy あ、はい。もちろん短い機械的なわざと意味のない名前付ける文化の大枠自体は、主にHaskellの影響だとは思います
2015-06-12 15:14:39@xuwei_k @writeboostguy 本当に使わないのであればContext Boundで済むので、名付けを避けるのがバッドノウハウな気がするんですよねー。コード中で明示的に使うんだから識別しやすい名前をつけて欲しい感あります。ってここでいうより提案しろって話ですがw
2015-06-12 15:17:36熟練Haskellerは型を扱うコードと値を扱うコードを無意識レベルで分けてるので型名と同じ変数名とかあっても混乱しないんだろうなー という気がしてる。まーScalaもコンパニオンobjectとか境界があやしいやつあるけど
2015-06-12 15:21:09@gakuzzzz 型さえ分かれば型クラスのインスタンスが一意に定まるので、その名前なんて考えたくないというか考えるべきではないという思想のはずなので、まぁ がくぞーさんとscalazの考えは相容れないので、どうしようもないという結論(?)
2015-06-12 15:21:26@gakuzzzz あー、そのためにscalazはコンパニオンにapplyあって、ほぼ全てをcontext boundとそれで済ませることは可能なのでそれでもいいんです。が、そのあたりの規約は特になくて、両方ごぎゃ混ぜなのは整理してもいい、が誰もその整理に興味ないので混ざったまま
2015-06-12 15:27:19@xuwei_k そうそう、Scalazのあのコンパニオンのapplyはいいしくみだなーと思ってます。オーバーヘッドとか気になっちゃってそっちに統一すべしみたいな提案ははたして良いのか?と悩んでみたり
2015-06-12 15:29:30@gakuzzzz 仮にそこを整理するpull reqが来たとして、他の人の反対がなければmergeして統一してもいいけど、結局自分もその整理どうでもいいので(?)、オーバーヘッドもそうだし、gitの履歴が無駄に増えるというデメリットもあるので放置してる感じですね
2015-06-12 15:31:53