2016-08-12 66 views
-1

在很多語言中,有很多方法可以爲RPC或甚至調用SQL函數創建稱爲透明代理(或代理transproxy)的東西。例如在C#中,我們既可以使用元編程(使用IOC),也可以使用DLR。 Haskell有沒有什麼方法可以創建透明代理?假設我們有一些服務和創建代理變量之後,我們必須能夠稱之爲「myFunc的」如下:Haskell中的透明代理

proxy myFunc arg1 arg2 

或任何類似的。我必須爲此使用模板Haskell嗎?

+1

如果你正在談論,例如['DynamicProxy'](http://www.castleproject.org/projects/dynamicproxy/),那麼否,Haskell沒有任何可怕的黑客那樣醜陋。您在語言X中學到的想法往往不適用於語言Y,因爲語言Y有不同的做事方式。那麼,你真的想要達到什麼? –

+0

我當然知道語言之間的範式差異,因爲我已經認真地使用了六種語言。我使用__getattr__和__call__魔術方法在Python中使用IoC代理對象來處理Python。我知道在Haskell中沒有類似的方法可以做到這一點,但我的意思是在Haskell中有實現客戶端透明的選擇嗎? (除完整代碼生成外) – Kamyar

+0

某些初始解決方法可以爲服務定義一個類型類型,然後使用運算符翻轉函數的第一個參數,以便生成的調用看起來更漂亮: 0x35> f = fx class MyService其中 myFunc :: MyService - > a - > b - > Int result < - myServiceInstance。> myFunc arg1 arg2' – Kamyar

回答

1

最簡單的方法是將代理作爲參數傳遞而不是其他方式(大多數時候我只是這樣做,而代理只是數據庫連接的句柄) 您也可以定義一些像這樣:

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

但我不認爲它會真的簡化任何事情。

+0

它可能不會簡化,但至少美化代碼!不管怎麼說,還是要謝謝你! – Kamyar