小编Con*_*nal的帖子

FRP应该如何在顶级工作?

我一直在尝试为Scala创建功能反应式编程框架.目前我很困惑的一件事是当前的实现如何处理在顶层表示行为.为了解释我的意思,我将举一个例子.说我有一个JPanel,我想这样做:

 JPanel panel = new Panel()
 panel.setBackground(new Behaviour(time => Color.red))
Run Code Online (Sandbox Code Playgroud)

虽然这里的颜色是静态的,但我们希望在行为更新值时更新面板背景.到目前为止,我完成它的方法是使用事件(通过changes行为上的函数可访问)基本上创建一个离散化的行为.这基本上只是行为发生变化时发生的事件源.使用这个setBackground的实现在这里:

def setBackground(color : Behaviour[Color]) {
  super.setBackground(color.now)
  color.changes.each(change => super.setBackground(change))
}
Run Code Online (Sandbox Code Playgroud)

这感觉有点乱.有没有人有任何关于这是否是一个坏方法的建议?我今天一直在关注Elliott的Push-Pull FRP,感觉我可能会朝着正确的方向前进但却迷失在某个地方.

编辑:如果没有人有明确的明确解决方案,那么想法/想法会很棒!

user-interface programming-languages functional-programming scala frp

11
推荐指数
1
解决办法
403
查看次数

OSX上的Haskell GUI库

我想在OSX上用Haskell创建一个GUI应用程序.它主要应该是在画布上绘画.我尝试了以下选项,但没有一个工作:

  • WX.由于依赖于过时的quicktime版本,它无法正常工作.我无法用它编译,也不能在ghci中使用它.
  • Gtk2hs.它涉及非常复杂的安装过程,对我来说无法使用自制软件(我在haskell.org wiki上尝试了这个序列,但它可能因为OSX10.8而无法使用).

还有其他选择吗?

user-interface haskell

9
推荐指数
1
解决办法
741
查看次数

懒惰评估及其效率的澄清

我在 Real World Haskell 上遇到了以下句子:

懒惰的评估有一些令人毛骨悚然的效果。假设我们要查找未排序列表的 k 个最小值元素。在传统语言中,显而易见的方法是对列表进行排序并取前 k 个元素,但这很昂贵。为了提高效率,我们将编写一个特殊的函数,一次性获取这些值,并且它必须执行一些中等复杂的簿记。在 Haskell 中,先排序再取的方法实际上表现良好:懒惰确保列表只会被排序到足以找到 k 个最小元素。

他们为此提供了一个代码实现:

minima k xs = take k (sort xs)
Run Code Online (Sandbox Code Playgroud)

但真的是这样吗?我认为即使在 Haskell 中,它也应该做一个完整的列表来取出k元素。(想象一下在列表末尾有最小的数字)。我在这里错过了什么吗?

haskell lazy-evaluation

5
推荐指数
1
解决办法
225
查看次数

是否可以在haskell中编写一个函数:(r - > [a]) - > [r - > a])?

它的倒数似乎有可能.因为我想象列表是产品并且->是取幂, (a*a*a...)^r = (a^r)*(a^r)....

既然我们可以定义逆,[a->r] -> a -> [r]那么不应该定义它吗?

haskell types inverse

3
推荐指数
1
解决办法
306
查看次数