pokarim さんによる Arrow 講座的な何か

宣伝をしていたと思ったら、いつのまにか宣伝されていた。
4
いげ太 @igeta

F# は C# に対するアンサーソング。

2010-07-02 12:33:32
いげ太 @igeta

関数型由来の LINQ バンザイゆうんやったら言語も関数型ベースのがええやん、とか。

2010-07-02 12:38:12
いげ太 @igeta

関数型コードもドットで繋いでくメソッド チェーンぽく書けるようにパイプライン演算子用意しとこか、とか。

2010-07-02 12:40:14
pokarim @pokarim

@igeta HaskellのArrowとかどうでしょう。>パイプライン演算子

2010-07-02 12:46:04
いげ太 @igeta

@pokarim Arrow おもしろいですよね。あんまりまだ理解できてないですが。 http://bit.ly/dtM0xy http://bit.ly/d7UBP1

2010-07-02 12:52:13
いげ太 @igeta

拡張メソッドがあって拡張プロパティがないのはおかしいよね、とか。

2010-07-02 12:57:26
pokarim @pokarim

@igeta インスタンスからインスタンスへの関数(実体はハッシュ)さえあれば"属性"自体いらないと思います。極端ですけど。実はオブジェクトが属性を所有する、という見方が諸悪の根源なのではと思ってます。

2010-07-02 13:03:56
いげ太 @igeta

@pokarim 属性? .NET 的な Attribute のことでなくて、オブジェクトが変更可能な状態を持つのが悪、的な話ですか?

2010-07-02 13:08:18
pokarim @pokarim

@igeta 違います。変更可能かどうかではなくAttributeやプロパティを、インスタンスをとって値を返す関数とみるということです。そうすると属性的なものも関数合成できたりします。関数型データベースモデルではそういう見方をするので汎用言語に応用できないかなと。

2010-07-02 14:14:47
いげ太 @igeta

@pokarim むむ。なるほど。インスタンスにぶら下げるんではなくてインスタンスに適用して算出するんだ、という?

2010-07-02 14:25:11
pokarim @pokarim

@igeta そうです。シンタックスは適当ですが、たとえば d = (a>>b>>c)とかすると、x.dがx.a.b.cと同義になったら便利かなとか。属性がクラスにぶら下がらずに独立してファーストクラスだとなにかと便利だと思うんですよね。

2010-07-02 14:36:52
kmizu @kmizu

面白い RT @pokarim: @igeta そうです。シンタックスは適当ですが、たとえば d = (a>>b>>c)とかすると、x.dがx.a.b.cと同義になったら便利かなとか。属性がクラスにぶら下がらずに独立してファーストクラスだとなにかと便利だと思うんですよね。

2010-07-02 14:39:28
いげ太 @igeta

@pokarim おー。可換ってのがポイントですかね。

2010-07-02 14:42:28
pokarim @pokarim

@igeta @kmizu ActiveRecordパターン使ってるときに、ある属性や、属性取得のチェーンに対して制約条件を課したり、特定の属性を組み合わせて、RDBのビューのようなものを作ろうとしたときに、属性を文字列としてしか指定できないのは微妙だなと思ったんですよね。

2010-07-02 14:51:41
いげ太 @igeta

DB とのマッピング的な話に繋がるのかー。俄然おもろい。

2010-07-02 15:01:05
kmizu @kmizu

@pokarim なるほど。ただ、ぱっと思ったのは、属性をファーストクラスオブジェクトとして扱えるというだけだとそれには不十分で、もうちょっとその概念を一般化した何かが作れそうな気がするんですよね。それが何かはよくわからないですが。

2010-07-02 14:53:09
pokarim @pokarim

@kmizu もうちょっとヒントが欲しいですね。どんなイメージでしょうか?>その概念を一般化した何か

2010-07-02 14:56:25
pokarim @pokarim

@kmizu 私は関数としてのインターフェースがあって、合成でなくatom的なものであれば内部はハッシュを持っていて変更可能であれば十分と思っています。>ファーストクラス属性 あとは逆方向の属性を生成したり直列・並列合成をするようなコンビネータを用意するというのはどうでしょうか。

2010-07-02 15:06:38
pokarim @pokarim

たとえば整数型の属性であれば、liftした四則演算子を用意するとポイントフリーで属性から属性が定義できる。体重と身長という属性がある時BMI値を、BMI=体重/身長^2という式でBMIというgetのみset不可な属性が定義できたらいいな、とか。>ファーストクラス属性

2010-07-02 15:15:16
pokarim @pokarim

Reactive Programmingとも相性よい予感。>ファーストクラス属性

2010-07-02 15:16:35
kmizu @kmizu

@pokarim すいません。実はあまりきちんと考えていたわけではないのですが、たとえば、属性だけじゃなくてメソッドなども含むクラスのメンバ全てを統一的に扱いたいなーとか。 fooBar(x) = ?.foo.bar(x); obj.fooBar(x) みたいな。

2010-07-02 15:17:10
pokarim @pokarim

@kmizu 属性を自分自身だけをとる関数とすれば、メソッドは加えて他のオブジェクトも引数にとる関数になるので、タプルに対する属性とする、もしくはカリー化的に他のオブジェクトを引数にとる関数が属性の値としてとれる、のどちらかで統一的に扱えると思いますがどうでしょう。

2010-07-02 15:25:36
pokarim @pokarim

まさにw! RT @igeta: @pokarim そこで Arrow と?

2010-07-02 15:26:39