編集可能
2012年1月9日

CleanでDynamicに閉包出来る型の制限について

Clean2.4でMacOSX, Linuxに対応したDynamic(言語の提供するシリアライズ)について。 この機能を使ってシリアライズ出来る型の制限をいくつか(再)確認した記録。
1
Ü+1F980🦀 @ranha

@eldesh すごい今更ながら,Clean 2.4 Dynamics on Mac(Lion)してみましたが,無事に動きました! ただこの(http://t.co/LARw2jpz)エントリにあるidをリストに入れるとinternal overloading ofとか出ますが

2012-01-06 03:11:11
ELD-R-ESH-2 @eldesh

@ranha Linuxでも確認しました。idの型アノテーションが間違ってましたね…。適当な多相じゃない型を指定と通ります(Int->Intとか)。もしくは dynamic id::A.a:a->a とするといけました!

2012-01-07 02:02:09
Ü+1F980🦀 @ranha

@eldesh dynamicに渡す時に書けばOKで,id::A.a:a->aという型シグネチャでidを定義してもダメなんですかね? うーんどうなってるんでしょ。

2012-01-07 02:16:59
ELD-R-ESH-2 @eldesh

@ranha あれ?ホントですね…。なんなんでしょう…?

2012-01-07 02:27:44
ELD-R-ESH-2 @eldesh

@ranha あ、分かりました。LangRep2.2 3.7.4(http://t.co/YcQbxdtq)に書いてあります。全称量化してある最後の引数より手前まででカリー化出来ないのが原因ですね。idをforallにしてしまうとその場で値を渡さないといけなくなります…。

2012-01-07 02:39:31
ELD-R-ESH-2 @eldesh

なら id::(A.a:a->a) にすればいいかというと、何故かCleanでは変数と関数が文法上区別され、かつ変数の型にはforallは付けられない感じなので('A`)ヴァー

2012-01-07 02:50:02
Ü+1F980🦀 @ranha

@eldesh うーん,これ多分関数は関係ないと思います。u = uと定義したuの型シグネチャをu :: aとして、こいつをidの代わりに用いても同様ですね

2012-01-07 02:50:18
Ü+1F980🦀 @ranha

コンパイルしたら"Run time error, rule 'check_kinds_of_dynamic_info;140' in module 'analtypes' does not match"とかいうし、やってしまった感がある

2012-01-07 02:57:04
ELD-R-ESH-2 @eldesh

@ranha A.を付けた場合の話なら先ほど挙げた制限でダメだと思うんですが、A.を付けない多相関数だと普通の型クラスと同じくオーバーロード解決出来ないってことじゃないですかね?

2012-01-07 02:57:17
ELD-R-ESH-2 @eldesh

またオモシロメッセージをw

2012-01-07 02:57:49
ELD-R-ESH-2 @eldesh

制限の内容が伝わってないのかしら…?

2012-01-07 03:02:32
Ü+1F980🦀 @ranha

@eldesh ああA.を付けない方の話で大丈夫なんですが、オーバーロード解決ってこの場合だと何の為にどういうタイミングで発生するんですかね

2012-01-07 03:03:32
ELD-R-ESH-2 @eldesh

@ranha Dynamicに入れられる型は内部的にはTC型クラスのインスタンスってことになってます。(例えばこんな感じ f :: a -> Dynamic | TC a)なので多相のままだとTCクラスのインスタンスが解決出来ないってことだと思います。

2012-01-07 03:08:35
Ü+1F980🦀 @ranha

@eldesh ああなるほど、dynamicがそういうことになってるんですね

2012-01-07 03:34:02
Ü+1F980🦀 @ranha

Cleanのoverloading resolutionてGHCのソレとは違うのかなー 例えば class C c where f :: c -> () で instance C a と instance C Int があった時に,f (0 :: Int)がどうなるかというと…

2012-01-07 03:45:15
Ü+1F980🦀 @ranha

Language Referenceの6.5と6.6あたりに書いてるのか

2012-01-07 03:56:21
ELD-R-ESH-2 @eldesh

あ、Cleanの記事修正するの忘れてた

2012-01-08 17:56:37

コメント

コメントがまだありません。感想を最初に伝えてみませんか?