问题标签 [frege]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 是否可以将 frege 与 Play 框架一起使用
我正在为一个新项目寻找一种语言。它是基于 Web 的项目,我想采用 REST 架构。
我还想要一种函数式编程语言。我可以在 Haskell(因为它很酷)和 Scala(因为 Play Framework)之间做出选择。
经过几次研究以找出这与语言之间的主要区别后,我发现了 Frege,一种在 JVM 上运行的类似 Haskell 的语言。
所以我的问题是,因为 Frege 在 JVM 上运行,是否可以将 Play 框架与 Frege 一起使用?
frege - 如何执行在 Frege 在线 repl 中截取的编译代码
好的,我想这是一个愚蠢的初学者问题:
我尝试通过在线repl学习弗雷格。为此,我认为将Dierk 的 Real World Frege中的代码示例粘贴到 repl 的右上方窗口是一个好主意,按编译并...?如何启动此代码?
frege - Frege REPL 中的代码问题
在尝试学习 Frege 时,我将一些代码从Dierk 的 Real World Frege复制到了在线 REPL 并尝试执行它(另请参阅如何执行在 Frege 在线 repl 中截取的编译代码)。我尝试过的脚本无法编译:-(
我究竟做错了什么?
以下是无法编译的示例:
以及整个ValuesAndVariables.fr代码
functional-programming - takeWhile 用于无限 IO 列表
我正在尝试使用可能包含以下类型元素的无限列表:
IO (Either Throwable a)
- 我只对使用 type 的元素感兴趣
Right
。 - 列表已排序。
Right
元素总是在前,然后是Left
元素
问题是我使用的实现是错误的,因为函数sequence
评估无限列表,所以函数永远不会结束。
关于如何正确使用该列表的任何想法?
export - Frege 中的显式模块导出
我在阅读Frege 语言规范并使用搜索引擎寻找示例后发布此内容。我希望我没有忽略一个明显的答案。
我正在尝试将一些 Haskell 代码移植到 Frege,但找不到任何提及显式模块导出的文档。所以,在我的 Haskell 代码中,我有类似的东西
但这会在 Frege 中产生编译器错误,我必须删除导出列表:
但是通过这种方式,我无法控制模块中定义的哪些符号被导出。
是否可以在 Frege 中定义显式模块导出?如果是这样,语法是什么?
java - 如何将整数列表从 Clojure 传递给 Frege 函数?
受上一个问题的启发,将整数列表从 java 传递给 frege 函数的最简单方法是什么?并在@Ingo的答案中发表评论,我试过了
但是得到(ctor =构造函数):
有任何想法吗?至少java.util.List
没有产生 ClassCastException;这是否意味着这是在正确的轨道上?
我可以从 Clojure 向 Frege 发送几乎任何 Java 集合类型,请参阅将 Clojure 数据结构转换为 Java 集合。
顺便说一句,使用 plain(Foo/myfregefunction [1,2,3,4])
代替 yield ClassCastException clojure.lang.PersistentVector cannot be cast to free.runtime.Lazy
,@Ingo 指出,“clojure 列表不是 frege 列表。” 转换为 时的类似响应java.util.ArrayList
。
在弗雷格方面,代码类似于
haskell - 是否有功能性 n:1 bimap?
我有一个映射,其中多个键可以映射到相同的值。我想做反向查找,这样给定一个值,我得到一个映射到这个值的所有键的列表。请注意,与
Data.Bimap
我的地图不同的是,不是 1:1 而是n :1。
此外,反向查找不应该像遍历所有映射条目那样花费O(n),而是像使用反向索引那样花费 O (log n)或更好。该映射将包含数以万计的条目,这些条目具有高负载的添加/删除/查找操作。
这种数据结构是否以函数形式提供(首选 Haskell 或 Frege)?
haskell - 如果 JVM 语言编译过程具有像 Haskell 这样的 STG 阶段会发生什么变化?
我有个朋友说:
对我来说,Haskell 最有趣的不是语言和类型。它背后是 Spineless Tagless Graph Machine。
因为 Haskell 的人一直在谈论类型,所以这句话真的引起了我的注意。现在我们可以这样看一下 Haskell 的编译过程:
- 解析
- 类型检查
- 脱糖+一些碎屑
- 翻译为核心
- 优化的最大份额
- 翻译成 STG 语言
- STG 语言转 C–</li>
- C– 装配或 llvm
我们可以简化为:
- ..前端的东西..
- 将 IL 翻译成 STG 语言
- 将 STG 语言编译为 C/ASM/LLVM/Javascript
即 - Haskell 被编译成一种中间“图形语言”,并且在它被编译成 LLVM/C 等之前在那里发生了各种优化。
这与如下所示的潜在 JVM 语言编译过程形成对比:
- 在类中将 JVM 语言代码转换为 Java 字节码。
- 在 Java 虚拟机上运行字节码。
假设可以在 Java 编译过程中添加一个中间 STG 编译步骤,我想知道这种变化会有什么影响?编译后的代码会有什么变化?
(我知道您需要一种纯函数式语言来充分利用无脊椎无标签图形机器,因此如果回答这个问题有帮助,假设我们正在编译Frege [Haskell for the JVM]。)
我的问题是:如果 JVM 语言编译过程有一个像 Haskell 这样的 STG 阶段,会发生什么变化?
haskell - 使用括号消除诸如“liftM b ap c”之类的表达式的歧义
在 Haskell 中,以下工作:
Frege 提示使用括号:
我在Haskell 报告中找到了这一部分:
涉及中缀运算符的表达式通过运算符的固定性来消除歧义(参见第 4.4.2 节)。具有相同优先级的连续无括号运算符必须都是左关联或右关联以避免语法错误。给定一个不带括号的表达式“x qop(a,i) y qop(b,j) z”,当“x qop(a,i) y”或“y qop(b,j) z”出现i=j 除非 a=b=l 或 a=b=r。
在上面的代码中,两个“运算符”都没有关联性并且具有相同的默认优先级,因此看起来 Frege 的行为与 Haskell 报告一致。
我理解对了吗?为什么在这种情况下 Frege 需要括号,而 Haskell 能够消除歧义?或者 Haskell 在这种情况下如何消除歧义?
frege - 类型不像建议的那样多态
我想建立一个抽象来使用不同的模板引擎:
我的第一次尝试是调整 Groovy 模板,因此我实现了所需的数据类型:
然后我做了相应的实例:
但是编译器抱怨:
有任何想法吗 ?我应该使用不同的策略吗?谢谢
更新:
为了解释我正在尝试做什么,我添加了一个函数,该函数表示从给定模板引擎构建模板的通用方法。
假设我知道 Frege 需要更精确地了解模板文件的类型、实例TemplateEngine
和BufferedReader
包含内容的内容,执行buildTemplate
给定引擎的函数应该给我一个Template
. 此处的此函数正在编译,根本没有任何警告。
我很困惑,为什么编译器不在这里抱怨?它不应该像以前一样抱怨吗?
更新二(工作解决方案):
按照 Ingo 的建议,我了解了我的设计背后的基本原理,并找到了一个可行的解决方案。
TemplateEngine
一开始我认为让类型类以相同的方式创建模板引擎实例会很棒。
但最重要的部分是有一个通用的类型类来处理模板等,因为模板可以被缓存。所以底线是,只要生成的模板是Template
.
在这个前提下,我可以有一个通用的函数来处理模板并获取生成的 html/json/xml...等。
当然production-ready
签名应该是这样的: