小编Rum*_*mca的帖子

Haskell美元运算符应用程序

我无法理解函数应用程序如何与haskell中的currying一起工作.如果我有以下功能:

($) :: (a -> b) -> a -> b
Run Code Online (Sandbox Code Playgroud)

我明白要部分应用这个功能,我需要提供(a -> b)函数($第一个参数).

为什么可以先应用一个值(即反向参数)?

($ 0) :: Num a => (a -> b) -> b
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

haskell operators partial-application dollar-sign operator-sections

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

使用不同的组合器(.)可以使无点函数更具可读性吗?

什么是无边表达的潜在替代表示(例如使用箭头,镜头,Haskell习语,做语法),这些表达式可以更像简单的英语?

这是一个简单的例子:

qNameIs :: String -> QName -> Bool
qNameIs = (. qName) . (==)
Run Code Online (Sandbox Code Playgroud)

QName 来自的记录 Text.Xml

什么可能相当于qNameIs但不是有意义的表达?理想情况下,那些会显示第一个参数将被传递给(==)结果的结果将被评估,结果qName应用于该表达式的第二个参数?

haskell pointfree

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

番石榴二进制版与以前的版本兼容吗?

Guava README说@Beta或者已经弃用了可以更改,删除等等.它没有说清楚所有剩余的类是否与以前的版本二进制兼容(或者我误读了它).虽然我没有另外说明,但我觉得它是向后兼容的.

我担心的是,其他一些库可能会对新的番石榴版本起作用(并编译).但它也可能依赖于新版本可能已更改/修复的一些错误行为,这些行为无法轻易检测到.我可以安全升级吗?

java backwards-compatibility binary-compatibility guava

9
推荐指数
2
解决办法
1837
查看次数

Haskell newtype语法

请帮我理解以下定义:

newtype Writer w a = Writer { runWriter :: (a,w) } 

instance (Monoid w) => Monad (Writer w) where 
    return a             = Writer (a,mempty) 
    (Writer (a,w)) >>= f = let (a',w') = runWriter $ f a in Writer (a',w `mappend` w')
Run Code Online (Sandbox Code Playgroud)

为什么runWriter被声明为

runWriter :: (a,w)
Run Code Online (Sandbox Code Playgroud)

当它的实际类型是:

runWriter :: Writer w a -> (a, w)
Run Code Online (Sandbox Code Playgroud)

一旦我尝试使用ghci,我意识到这必须是一些隐含的参数,因为必须确定类型"a",但这里究竟发生了什么?

haskell newtype

8
推荐指数
1
解决办法
877
查看次数

哪些语言支持镜头或类似的方式来更新不可变的嵌套结构?

虽然许多人称赞不变性,但我发现在主流编程中难以维持.根据我的经验,程序员迟早会使字段再次变异,以避免重构大部分代码,这些代码必须传递更新的对象以及返回值.

Scala对复制构造函数有一些支持,但我知道没有令人满意的解决方案来更新复杂的对象结构.我可能错过了什么.

我实验过的最好的实现是Haskell中的数据镜头.但是,Haskell很难学.流行的跨平台编程语言(如Java或Scala)有哪些选择?

java scala immutability lenses

8
推荐指数
1
解决办法
1336
查看次数

为什么选择函数应用程序作为默认的Haskell运算符,而不是组合?

f . g $ 33 g f面向堆栈的语言相比,Haskell语法需要相对嘈杂.这个选择的主要设计论点是什么?

haskell

8
推荐指数
2
解决办法
278
查看次数

haskell中的代码检测

假设我维护连接到外部系统的复杂应用程序.有一天它开始为某些输入返回意外结果,我需要找出原因.它可能是DNS问题,filesytem相关问题,外部系统更改,任何事情.

假设处理量很大,在我能够识别问题的可能位置之前,我需要获得原始应用程序不会产生的详细跟踪.

如何检测现有代码,以便我(例如)可以提供某些组件或功能存在错误的非易失性证明(不是实时调试会话).

instrumentation haskell

7
推荐指数
1
解决办法
234
查看次数

如何在Haskell中进行复杂的IO处理和隐式缓存?

在更大的应用程序中,通常有多层IO缓存(Hibernate L1和L2,Spring缓存等),这些层通常是抽象的,因此调用者不需要知道特定的实现是否有IO.通过一些警告(范围,事务),它允许组件之间更简单的接口.

例如,如果组件A需要查询数据库,则无需知道结果是否已缓存.它可能是由B或C检索的,A对此一无所知,但他们通常会参与某些会话或交易 - 通常是隐含的.

框架倾向于使用像AOP这样的技术使这个调用与简单的对象方法调用无法区分.

Haskell应用程序可以像这样受益吗?客户端的界面如何?

io aop caching haskell

6
推荐指数
1
解决办法
668
查看次数

是否有任何Haskell特定工具可以显示导入模块的源代码?

如何在没有互联网连接的情况下浏览Haskell源代码?现在我点击hackage搜索结果,点击源链接并搜索源页面.有两个问题:

  • 我正在使用当前版本作为我本地的代理
  • 这不能递归地工作(另一次点击并搜索下一个定义)

通常,IDE允许您下载任何库的源代码并打开带有定义的新编辑器选项卡.我更喜欢阅读代码而不是文档,一路上没有意外,我可以从中学到一些东西.

那么,如何在必要时使用Haskell工具或标准GNU工具设置递归源搜索?我现在所知道的是,我可以为vim生成ctags但是cabal存储来源在哪里?

ide haskell cabal

6
推荐指数
1
解决办法
201
查看次数

如何实现相当于invokeAll的Haskell

我正在寻找Haskell中ExecutorService.invokeAll的等效功能.我需要实现它吗?来自文档:

执行给定的任务,返回完成所有状态和结果的Futures列表.

在我的用例中,任务花费大部分时间等待IO,所以我只需要避免不断地阻塞主线程,这会产生一系列Either结果或错误.

concurrency haskell

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