2016-08-12 65 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