我最近发现了FP错误(试图学习Haskell),到目前为止,我对我所看到的(一流函数、惰性求值和所有其他好东西)印象深刻。我还不是专家,但我已经开始发现对基本算法进行“功能性”推理比命令式推理更容易(而且我很难回到我必须回到的地方)。

The one area where current FP seems to fall flat, however, is GUI programming. The Haskell approach seems to be to just wrap imperative GUI toolkits (such as GTK+ or wxWidgets) and to use "do" blocks to simulate an imperative style. I haven't used F#, but my understanding is that it does something similar using OOP with .NET classes. Obviously, there's a good reason for this--current GUI programming is all about IO and side effects, so purely functional programming isn't possible with most current frameworks.

My question is, is it possible to have a functional approach to GUI programming? I'm having trouble imagining what this would look like in practice. Does anyone know of any frameworks, experimental or otherwise, that try this sort of thing (or even any frameworks that are designed from the ground up for a functional language)? Or is the solution to just use a hybrid approach, with OOP for the GUI parts and FP for the logic? (I'm just asking out of curiosity--I'd love to think that FP is "the future," but GUI programming seems like a pretty large hole to fill.)


当前回答

无论您使用的是f#或OCaml这样的函数/OO混合语言,还是Haskell这样的纯函数式语言(其中副作用被归为IO单子),大多数情况下,管理GUI所需的大量工作更像是“副作用”,而不是纯函数式算法。

也就是说,已经有一些关于功能性gui的可靠研究。甚至还有一些(主要)功能性工具包,如Fudgets或FranTk。

其他回答

函数式编程可能从我上大学的时候就开始了,但我记得函数式编程系统的主要观点是阻止程序员产生任何“副作用”。然而,用户购买软件是由于其产生的副作用,例如更新用户界面。

像XUL这样的标记语言允许您以声明式的方式构建GUI。

我的问题是,是否可能有一种函数式的GUI编程方法?

您正在寻找的关键词是“函数式响应式编程”(FRP)。

Conal Elliott和其他一些人试图为FRP找到正确的抽象,这有点像家庭手工业。在Haskell中有几个FRP概念的实现。

您可能会考虑从Conal最近的“Push-Pull函数式响应式编程”论文开始,但是还有其他一些(更老的)实现,其中一些链接来自haskell.org网站。Conal有一个覆盖整个领域的诀窍,他的论文可以在不参考以前的情况下阅读。

为了感受如何将这种方法用于GUI开发,您可能想要看看Fudgets,虽然它在90年代中期设计,但确实为GUI设计提供了可靠的FRP方法。

为了解决这个问题,我发布了一些我在使用f#时的想法,

http://fadsworld.wordpress.com/2011/04/13/f-in-the-enterprise-i/ http://fadsworld.wordpress.com/2011/04/17/fin-the-enterprise-ii-2/

我还计划做一个视频教程来完成这个系列,并展示f#如何在UX编程中做出贡献。

这里我只是在f#上下文中讨论。

法赫德

你可以看看Don Syme在f#上的系列,他演示了如何创建一个gui。下面的链接指向本系列的第三部分(您可以从那里链接到其他两部分)。

使用f#进行WPF开发将是一个非常有趣的GUI范例……

http://channel9.msdn.com/shows/Going+Deep/C9-Lectures-Dr-Don-Syme-Introduction-to-F-3-of-3/