小编mat*_*tbh的帖子

使用GHCi时如何为函数提供显式类型声明?

如何在GHCi中定义此函数的等价物(取自learnyouahaskell)?

import Data.List  

numUniques :: (Eq a) => [a] -> Int  
numUniques = length . nub  
Run Code Online (Sandbox Code Playgroud)

如果没有类型声明,GHCi会接受函数定义,但最终会出现无用的类型:

Prelude Data.List> import Data.List 
Prelude Data.List> let numUniques' = length . nub
Prelude Data.List> :t numUniques'
numUniques' :: [()] -> Int
Run Code Online (Sandbox Code Playgroud)

结果函数仅接受单位列表作为参数.

有没有办法在GHCi中提供类型声明?或者是否有另一种方法来定义这些不需要类型声明的函数?

我在GHCi指南中没有看到明显的线索,并尝试了以下表达式(无济于事):

> let numUniques' = ((length . nub) :: (Eq a) => [a] -> Int)
> :t numUniques'
numUniques' :: [()] -> Int
Run Code Online (Sandbox Code Playgroud)

haskell types ghci function-declaration

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

如何通过类型签名搜索Java API方法?

是否有任何可用的开源工具支持通过参数类型集和返回类型搜索Java方法?

举个例子,假设我正在寻找一种为int数组生成哈希码的方法.我搜索一个采用int []参数并返回int的方法:

int[] -> int
Run Code Online (Sandbox Code Playgroud)

生产

java.util.Arrays#hashCode(int[])
...
Run Code Online (Sandbox Code Playgroud)

或者我可能想要找到一个方法,它接受一个字符串,并替换字符,并将字符替换为.所以我搜索匹配的方法:

String, char, char -> String
Run Code Online (Sandbox Code Playgroud)

生产

java.lang.String#replace(char, char)
...
Run Code Online (Sandbox Code Playgroud)

理想情况下,我喜欢Java等同于Haskell的Hoogle,它支持通过类型签名搜索功能.

我期待这个工具:

  • 忽略参数的顺序
  • 包括接受'更宽'类型作为参数的方法(例如超类)
  • 包含返回'narrower'类型作为返回值的方法(例如子类)
  • 将'self'值作为实例方法的参数处理(例如'String - > int'将包含String#hashCode)

我知道许多IDE支持搜索获取或返回给定类型的方法,但尚未看到通过参数类型返回类型的组合来缩小搜索范围的工具.

java navigation search static-analysis reference

25
推荐指数
2
解决办法
5492
查看次数

如何在perl6中执行外部命令并捕获其输出?

如何在Perl6中执行外部命令并捕获其输出?

Perl5风格的后退功能似乎不起作用:

> my $results = `ls`;
Confused at line 1, near "my $results"
Run Code Online (Sandbox Code Playgroud)

概要16记录了run方法,但是它返回退出状态而不是stdout的输出.

我正在使用Rakudo实现(rakudo-star-2010.12).

process rakudo perl6 raku

14
推荐指数
3
解决办法
1099
查看次数

FC++是否被任何开源项目使用?

所述FC++库提供一个有趣的方法在C++支撑功能的编程的概念.

FAQ中的一个简短示例:

take (5, map (odd, enumFrom(1)))
Run Code Online (Sandbox Code Playgroud)

FC++似乎从Haskell中获得了很多灵感,从而重用了Haskell前奏中的许多函数名称.

我已经看过最近一篇关于它的文章,并且在stackoverflow的一些答案中已经简要地提到过,但我无法在野外找到它的任何用法.

是否有任何开源项目积极使用FC++?或者过去使用它的任何项目历史?或者有人有个人经验吗?

网站上有一个客户部分,但唯一的活动链接是同一作者的另一个库(LC++).

作为背景:我正在寻找使用现有C++ API编写低延迟音频插件,我正在寻找允许我以功能样式编写简洁代码的工具.对于这个项目,我不想使用C++库而不是使用单独的语言,以避免引入FFI绑定(因为复杂性)或垃圾收集(以保持亚毫秒范围内的延迟上限).

我知道STL和Boost库已经提供了许多FP概念的支持 - 这可能是一种更实用的方法.我也知道其他有用的方法来生成功能语言的代码生成音频DSP代码,例如FAUST项目或Haskell 合成器包.

c++ haskell functional-programming

13
推荐指数
2
解决办法
1116
查看次数

"最新"保证Java的最终字段的值是否延伸到间接引用?

Java语言规范定义了第17.5节中最终字段的语义:

最终字段的使用模型很简单.在该对象的构造函数中设置对象的最终字段.在对象的构造函数完成之前,不要在另一个线程可以看到的位置写入对正在构造的对象的引用.如果遵循此原因,那么当另一个线程看到该对象时,该线程将始终看到该对象的最终字段的正确构造版本.它还将看到那些最终字段引用的任何对象或数组的版本,这些字段至少与最终字段一样是最新的.

我的问题是 - '最新'保证是否扩展到嵌套数组和嵌套对象的内容?

简而言之:如果一个线程将可变对象图分配给对象中的最终字段,并且对象图永远不会更新,那么所有线程都可以通过最终字段安全地读取该对象图吗?

示例场景:

  1. 线程A构造一个ArrayLists的HashMap,然后在类'MyClass'的实例中将HashMap分配给final字段'myFinal'
  2. 线程B看到对MyClass实例的(非同步)引用并读取'myFinal',并访问和读取其中一个ArrayLists的内容

在这种情况下,线程B看到的ArrayList的成员是否保证至少与MyClass的构造函数完成时一样最新?

我正在寻找澄清Java内存模型和语言规范的语义,而不是像同步这样的替代解决方案.我的梦想答案是肯定或否定,并参考相关文字.

更新:

  • 我对Java 1.5及更高版本的语义感兴趣,即通过JSR 133引入更新的Java内存模型.此更新中引入了最新字段的"最新"保证.

java memory concurrency synchronization final

10
推荐指数
1
解决办法
564
查看次数

如何在coffeescript中为Google Apps脚本生成全局的,命名的javascript函数

我想使用CoffeeScript 为Google Apps脚本编写Javascript脚本,而且我无法以预期的形式生成函数.

Google Apps脚本希望脚本包含顶级命名函数.(我可能使用了错误的术语,所以我将用例子说明我的意思......)

例如,Google Apps脚本可以很好地识别此功能:

function triggerableFunction() {
   // ...
}
Run Code Online (Sandbox Code Playgroud)

...虽然这个函数不是(它会解析,但你不会触发它):

var nonTriggerableFunction;

nonTriggerableFunction = function() {
  // ...
};
Run Code Online (Sandbox Code Playgroud)

我发现使用CoffeeScript,我能得到的最接近的是nonTriggerableFunction上面的表格.生成triggerableFunction如上所述的命名函数的最佳方法是什么?

我已经在使用'bare'选项(-b开关),在没有顶级功能安全包装的情况下进行编译.

我在网上找到的一个结合了CoffeeScript和Google App Script的项目是Gmail GTD Bot,它似乎是使用反向标记的组合,并要求用户从结果代码中手动删除一些行.(请参阅脚本末尾和README的"安装"部分).我希望有一个更简单,更清洁的解决方案.

javascript function google-apps-script coffeescript

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

在任何符合POSIX标准的shell中获取自纪元以来的秒数

我想知道是否有办法在任何符合POSIX标准的shell中获得自UNIX纪元以来的秒数,而无需使用perl之类的非POSIX语言,或使用非POSIX扩展(如GNU awk的strftime函数).

以下是我已经排除的一些解决方案......

date +%s //不适用于Solaris

我见过一些shell脚本 建议之前,其解析输出date,然后获得从格式化的公历日期秒,但他们似乎并没有采取像闰秒细节考虑在内.

GNU awk具有该strftime功能,但这在标准中不可用awk.

我可以编写一个调用该time函数的小型C程序,但该二进制文件将特定于特定的体系结构.

是否有使用POSIX兼容工具的跨平台方式?

我很想放弃并接受对perl的依赖,这至少是广泛部署的.

perl -e'print time'//作弊(非POSIX),但应该适用于大多数平台

shell scripting time posix

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