2016-08-12 19 views
-1

多くの言語では、RPCを実行したりSQL関数を呼び出すために透過プロキシ(transproxy)と呼ばれるものを作成する方法があります。例えば、C#では、メタプログラミング(IOCを使用)やDLRの両方を使用することができます。 Haskellに透明なプロキシを作成する方法はありますか?Haskellの透過プロキシ

proxy myFunc arg1 arg2 

または類似のものは何でも:私たちはいくつかのサービスがあり、代理変数を作成した後、我々は以下のように「myFuncという」を呼び出すことができなければならないとします。これにTemplate Haskellを使用する必要がありますか?

+1

[DynamicProxy'](http://www.castleproject.org/projects/dynamicproxy/)について話しているのなら、Haskellはその恐ろしいハッキングほど醜いものを持っていません。言語Xで学んだアイデアは、言語Yには適用されません。なぜなら、言語Yにはさまざまなやり方があるからです。だから、あなたは本当に何を達成しようとしていますか? –

+0

私は真剣に半ダースの言語で作業して以来、言語間のパラダイムの違いについて確かに知っています。 Pythonでは__getattr__と__call__という魔法のメソッドを使い、C#ではIoC Proxyオブジェクトを使って同じことをします。私はHaskellにこれと同様の方法はないと知っていますが、私は、Haskellでクライアントの透明性を実装するための代替手段があることを意味していますか? (フルコード生成以外) – Kamyar

+0

初期の回避策は、サービスの型クラスを定義してから、関数の最初の引数を反転させる演算子を定義することができます。 'x。> f = fx class MyServiceここで、 myFunc :: MyService - > a - > b - > Int 結果< - myServiceInstance。> myFunc arg1 arg2' – Kamyar

答えて

1

最も簡単な方法は、他の方法ではなく引数としてプロキシを渡すことです(ほとんどの場合、プロキシはデータベース接続のハンドルに過ぎません) また、

newtype Proxy = Proxy {withProxy :: (forall a . Proxiable a -> IO a)} 

しかし、私は本当に何かを単純化するとは思わない。

+0

単純化しますが、少なくともコードを美化してください!とにかくありがとう! – Kamyar

関連する問題