函数式 GUI 编程可能吗? [关闭]

2024-04-18

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

然而,当前 FP 似乎表现不佳的一个领域是 GUI 编程。 Haskell 方法似乎只是包装命令式 GUI 工具包(例如 GTK+ 或 wxWidgets)并使用“do”块来模拟命令式风格。我没有使用过 F#,但我的理解是,它使用 OOP 和 .NET 类来执行类似的操作。显然,这是有充分理由的——当前的 GUI 编程都是关于 IO 和副作用的,因此大多数当前框架不可能实现纯函数式编程。

我的问题是,是否有可能采用函数式方法进行 GUI 编程?我很难想象这在实践中会是什么样子。有谁知道有任何框架,实验性的或其他的,尝试这种事情(甚至是任何从头开始为函数式语言设计的框架)?或者,解决方案只是使用混合方法,将 OOP 用于 GUI 部分,将 FP 用于逻辑? (我只是出于好奇而问——我很想认为 FP 是“未来”,但 GUI 编程似乎是一个需要填补的相当大的漏洞。)


Haskell 方法似乎只是包装命令式 GUI 工具包(例如 GTK+ 或 wxWidgets)并使用“do”块来模拟命令式风格

这并不是真正的“Haskell 方法”——这只是通过命令式接口最直接地绑定到命令式 GUI 工具包的方式。 Haskell 恰好有相当突出的绑定。

有几种中等成熟的,或者更多实验性的纯函数式/声明式 GUI 方法,大多数是在 Haskell 中,并且主要使用函数式反应式编程。

一些例子是:

  • 反射平台,https://github.com/reflex-frp/reflex-platform https://github.com/reflex-frp/reflex-platform
  • 柚子,http://hackage.haskell.org/package/grapefruit-ui-gtk http://hackage.haskell.org/package/grapefruit-ui-gtk
  • 反应性,http://hackage.haskell.org/package/reactive-glut http://hackage.haskell.org/package/reactive-glut
  • wx水果,http://hackage.haskell.org/package/wxFruit http://hackage.haskell.org/package/wxFruit
  • 反应性香蕉,http://hackage.haskell.org/package/reactive-banana http://hackage.haskell.org/package/reactive-banana

对于那些不熟悉 Haskell、Flapjax 的人来说,http://www.flapjax-lang.org/ http://www.flapjax-lang.org/是 JavaScript 之上的函数式反应式编程的实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数式 GUI 编程可能吗? [关闭] 的相关文章

  • 如何避免编写这种类型的 Haskell 样板代码

    我经常遇到这种情况 这很烦人 假设我有一个 sum 类型 它可以保存一个实例x或一堆其他无关的事情x data Foo x X x Y Int Z String other constructors not involving x 要声明
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import
  • 如何在 F# 中实现返回 void 的接口成员

    想象一下 C 中的以下接口 interface IFoo void Bar 我如何在 F 中实现这一点 我在 30 分钟的在线搜索中找到的所有示例都仅显示具有返回类型的示例 我认为这在函数式风格中更常见 但在这种情况下我无法避免 这是我到目
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • 不可勾选的单选按钮与专有的复选框

    从 UI 角度来看 是拥有一组具有取消选中功能的单选按钮更好 还是拥有一组独占的复选框 意味着一次只能选中一个 更好 Update 我没想到对此会有如此负面的反应 如果我给出一个更接近其使用方式的示例 也许会有所帮助 我有一个充满数据绑定内
  • 将一个列表(n 元组或列表)与另一个列表(也可以是数组)缩放的惯用 F# 方法是什么?

    Given let weights 0 5 0 4 0 3 let X 2 3 4 7 3 2 5 3 6 我想要的是 wX 0 5 2 3 4 0 4 7 3 2 0 3 5 3 6 我想知道一种使用列表和数组来执行此操作的优雅方法 欢迎
  • Haskell cabal:我刚刚安装了软件包,但现在找不到软件包

    在这里 http haskell org haskellwiki Cabal Install I just installed packages 2C but now the packages are not found这是我可以找到我正在
  • Haskell 中实例声明的参数顺序切换

    我想进行实例声明 但自由类型变量不是最后一个变量 例如 我有一个类声明 class Poppable m where tryPop m a gt Maybe a m a 现在我想让 Q PSQ 优先级队列 成为 Poppable 的实例 具
  • 如何对对象数组调用reduce来求和它们的属性?

    说我想求和a x对于中的每个元素arr arr x 1 x 2 x 4 arr reduce function a b return a x b x gt NaN 我有理由相信a x is undefined在某一点 以下工作正常 arr
  • 如何使用单独的线程部分重绘自定义 SurfaceView 而不会丢失以前的编辑?

    我目前在按照自定义绘图时遇到问题SurfaceView来自不在我的主 UI 上的线程 这SurfaceView占据整个屏幕 Galaxy S3 全屏 并且必须从多个来源进行更新 问题是习惯SurfaceView不会保存 UI 更新之间的更改
  • 设置 SWT Shell 的默认字体

    有没有办法为整个 Shell 设置默认字体 以便任何新控件都将使用相同的字体 看来现在我必须为我创建的每个控件设置字体 这导致了太多的冗余 默认使用的字体由平台选择 请参阅中的其他信息 类字体 SWT 标准小部件工具包 http book
  • 生成 .tail IL 指令的简单 F# 代码是什么?

    我想看看 tailIL 指令 但我一直在编写的使用尾部调用的简单递归函数显然已优化为循环 我实际上是在猜测这一点 因为我不完全确定反射器中的循环是什么样的 我绝对没有看到任何 tail不过操作码 我在项目的属性中检查了 生成尾部调用 我还尝
  • F# 如何标记用户输入:分隔数字、单位、单词?

    我对 F 相当陌生 但最近几周一直在阅读参考资料 我希望处理用户提供的输入字符串 识别并分隔组成元素 例如 对于此输入 XYZ 酒店 6 晚 220 欧元 晚 加17 5 的税 输出应该类似于元组列表 XYZ 字 酒店 字 6 数字 夜晚
  • 为什么我不能将 Int 类型与 a 类型匹配

    哈斯克尔新手在这里 我在这里尝试做的事情的一个过于简单的例子 test Int gt a test i i Couldn t match expected type a with actual type Int a is a rigid t
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 如何构造 Network.HTTP.Conduit.Request 对象?

    试图构建一个Request with 网络 HTTP 管道 http hackage haskell org packages archive http conduit 1 1 0 1 doc html Network HTTP Condu
  • Javascript 与 Python 关于 Python 'map()' 函数的比较

    Python中有一个函数叫做map这可以让你去 map someFunction x y z 并继续应用该功能的列表 是否有与此功能等效的 JavaScript 我现在刚刚学习Python 虽然我被告知javascript是函数式语言 但我
  • haskell复制目录的方法是什么

    我发现自己用 Haskell 编写越来越多的脚本 但在某些情况下 我真的不确定如何 正确 地做到这一点 例如递归地复制目录 a la unixcp r 由于我主要使用 Linux 和 Mac OS 所以我通常会作弊 import Syste
  • 系统地将函数应用于 haskell 记录的所有字段

    我有一条包含不同类型字段的记录 以及一个适用于所有这些类型的函数 举一个小 愚蠢 的例子 data Rec Rec flnum Float intnum Int deriving Show 比如说 我想定义一个为每个字段添加两条记录的函数
  • `arr fst` 是如何自然变换的?

    I asked 这个问题 https stackoverflow com q 62733726 11143763不久以前 这是关于以下箭头定律 arr fst first f f arr fst Category k gt k b c gt

随机推荐

  • 如何调试SocketTimeoutException?

    我们正在得到一个java net SocketTimeoutException当客户端 A 连接到服务器 B 时 在服务器 B 上 不知道为什么 客户端正在向服务器发送数据 然后服务器抛出此异常 如何解决这个问题 请注意 目前这种情况只发生
  • 在特定单元格之后停止执行 Databricks 笔记本

    我在 Databricks 笔记本上尝试了 sys exit 0 Python 代码 和 dbutils notebook exit 但这两个选项都不起作用 请建议任何其他方法来停止 Databricks 笔记本中特定单元格之后的代码执行
  • 有什么方法(或快捷方式)可以像在 Eclipse 中一样自动导入 IntelliJ IDEA 中的类吗?

    In Eclipse while coding in Java and press Ctrl Shift O auto import all the Classes automatically In NetBeans this is don
  • 在页面加载时从 JSP 文件调用 servlet

    我可以在不使用 HTML 表单的情况下从 JSP 文件调用 servlet 吗 例如 在页面加载期间在 HTML 表中显示数据库的结果 您可以使用doGet http docs oracle com javaee 7 api javax s
  • 如何让 Eclipse 显示 javax 注释的 Javadoc

    我真的很喜欢 Eclipse 为我使用的各种 Java 库类提供弹出式 Javadoc 文档的方式 不过 我也使用 JPA 和 JAXB 注释 例如 Entity 和 XMLType Eclipse 认为这些是有效的 因为我可以按 ctrl
  • HTTPResponse 对象 -- JSON 对象必须是 str,而不是“字节”

    我一直在尝试更新一个名为的小型 Python 库libpynexmo https github com marcuz libpynexmo使用 Python 3 我一直被这个功能困住了 def send request json self
  • 创建一个临时表并从中选择

    当我运行此命令时 出现错误 未声明的变量 temp
  • 调整组件大小时 JPanel 闪烁

    首先 我想澄清一下 我知道这个问题已经被问过很多次了 但是 我还没有找到对我有用的答案 我正在尝试制作一款需要分辨率的游戏 因此 我开始工作 使一个组件适应另一个组件的大小 同时保持纵横比 但我遇到了一个问题 那就是对象会发生某种轻弹或调整
  • 如何在 WebdriverIO 中单击 CTRL+M (Control + M)

    我必须发出一个CTRL MWebdriverIO 中的操作 但它不起作用 我尝试过使用不同的方法 例如 browser keys Control keys m browser keys Control KeyM NULL browser k
  • 如何为 HDFS 递归列出子目录?

    我在 HDFS 中递归创建了一组目录 如何列出所有目录 对于普通的 UNIX 文件系统 我可以使用以下命令来做到这一点 find path type d print 但我想为 HDFS 得到类似的东西 递归列出目录内容hadoop dfs
  • 仅绘制 y 轴,不绘制其他内容

    我想创建一个仅显示 y 轴 包括网格 数字和标签 的图 但我不想显示绘图或 x 轴 这可以吗 创建绘图时 您只需指定一些选项 特别要注意的是axes type and xlab plot runif 10 runif 10 xlim c 0
  • 如何在java中使用gson解码json字符串?

    我有一个json字符串 社交网络Qaiku的流 我怎样才能用Java解码它 我已经搜索过 但任何结果都对我有用 谢谢 对象反序列化的标准方法如下 Gson gson new Gson MyType obj gson fromJson jso
  • 为什么删除相关行 boot() 中的行不会被触发?

    在我的 Laravel 5 7 应用程序中 我有 2 个表 Tag TagDetail 一对一关系 第二个表将图像上传到存储和图像字段 我想使用引导方法自动删除相关行和图像 结果删除与 TagDetail 相关的 Tag 行被删除 但 Ta
  • 如何返回派生类型?

    我有一个 Validator 类及其派生类 当我尝试返回指向派生类的指针时 方法返回基类 验证器 而不是派生类 class Validator public std string m name BaseValidator static co
  • 对象类和数组 - 为什么它返回“null”? [java]

    我编写了一个小类 它创建一个包含 3 个数组的报表对象 在创建对象时 这些数组用值进行初始化 然而 当我测试该类以查看例如部门数组中的内容时 它会打印出数组元素为空 为什么 class Report declare instance var
  • 更新整数列中的特定位

    我有一个 mysql 表 其中用户权限存储为位掩码 user permissions Admin 31 User 13 16 8 4 2 1 Admin gt 1 1 1 1 1 gt 16 8 4 2 1 gt 31 User gt 0
  • android中的react-native-snap-carousel上手动水平滚动的问题

    我正在使用react native snap carousel来显示横幅 它在 iOS 中的手动滚动和间隔后自动滚动都运行良好 但在 Android 中手动滚动时面临两个问题 对于某些设备 特别是三星 它会卡在第三个索引处 手动完成时 但自
  • 在 Mac 上开发 .Net 应用程序? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是 Net 开发人员 开始使用 Mac OS 我在这个系统上唯一怀念的是 VISUAL STUDIO 我不想使用两个系统 你认为如何开发 Ne
  • Impala 表中的压缩

    我想了解 Impala 表中的压缩 但找不到可供研究的材料 有哪些不同的技术以及我在哪里可以找到研究它的材料 主要技术为compaction是为了避免small file problem这取决于您的用例 例如 您可能有一个将小文件写入的进程
  • 函数式 GUI 编程可能吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我最近发现了 FP bug 试图学习 Haskell 到目前为止所看到的东西给我留下了深刻的印象 一流的函数 惰性求值和所有其他好处 我还不是专