小编Joh*_*ler的帖子

在Haskell的Lens库中,`ix`和`at`有什么区别?

我所知道的是一个有效,另一个没有.

上下文: 我有一个数据结构F,其中包含Data.Map.Map k S另一个数据结构S.我的目标是建立一个Lens给定的F,k并将描述一个领域S.

困难在于密钥k可能不存在于地图中.这很好,该函数可以在Maybe中包装它的返回.但是,我无法通过使用Maybe传播镜头at.在阅读了很多Stack Overflow答案之后,我遇到了这个问题.

事实证明,更换atix解决我的问题类型,如果我还换成(^.)(^?).

问题: 似乎at并且ix做同样的事情,至少在这方面Map.两者都拿一把钥匙并给那个钥匙的价值一个'镜头'.但是,ix似乎与函数组合运算符很好(.).两者有什么区别?


关闭主题咆哮:

我像下一个人一样喜欢中缀运算符,但Control.Lens包看起来有点过分了.对于具有某些英文名称和某个键的新用户而言,会降低学习曲线.由于Lens库中使用了大量的包装器类,如果您还不知道发生了什么,则特别难以深入了解类型签名.为了天堂,我的代码开始看起来像Perl.

haskell haskell-lens

26
推荐指数
1
解决办法
1527
查看次数

Haskell库类型类的最低规范?

Haskell前奏和标准库定义了许多有用的类型类.

是否有某个页面列出了所有这些类的最小完整定义?

haskell

23
推荐指数
1
解决办法
561
查看次数

在Git中使用备用diff算法

因为git是为源代码设计的,所以它的默认diff算法将行视为最小不可分割单位.

我正在尝试编辑一些包含在第80列自动换行的降价文件.添加一个句子可以使段落的其余部分标记为已更改.

有没有办法让Git使用更适合文本的diff算法?我需要一个将单词或句子视为不可分割的单位而不是线条的单位?

git diff

22
推荐指数
3
解决办法
3145
查看次数

在Haskell LLVM绑定中理解CodeGen*

背景:我正在Haskell写一个玩具Lisp interperter /编译器,用于我自己的娱乐/启发.我试图添加编译为LLVM字节码的能力.

语境:我一直在阅读的文档LLVM.Core和代码示例(在这里),试图了解该组合的手段抽象的手段(如描述阿伯尔森和萨斯曼计算机程序的结构与解释的哈斯克尔LLVM使用.)绑定.有很多小件,我不清楚他们打算如何合作.看起来基本的LLVM机器指令之上有一定程度的抽象,对于那些对LLVM有很多经验的人来说是显而易见的,但对于那些像我这样只是沾沾自喜的人来说,没有记录.

问:什么是CodeGenModuleCodeGenFunction它们是怎样被用来建立FunctionsModules

haskell language-design llvm

22
推荐指数
1
解决办法
1384
查看次数

在JavaScript的Underscore.js库中,'context'是什么意思,我该如何使用它?

我正在从DocumentCloud阅读Underscore.js库的文档.许多函数采用可选context参数,这是没有解释的.我的猜测,熟悉Ruby的人就是这类似于Ruby binding.而且它与什么this方式有关.我的JavaScript使用范围是一些jQuery调用和一些非常的样板ajax.

我的问题:什么context意思,我应该如何使用它?一个好的答案应该包含一些关于JavaScript如何工作的信息.

javascript underscore.js

20
推荐指数
1
解决办法
4229
查看次数

为'lambda'生成LLVM代码,'define'

所以我现在有一个用haskell编写的相当完整的LISP(方案)解释器.只是为了好玩,我想尝试将它编译成LLVM.大多数代码生成看起来都非常简单,但我对如何为lambda表达式生成代码感到茫然(在lisp中有点重要;))以及如何在遇到define表达式时管理堆.

我怎么能为这些表达式生成代码?

注意:我可以为lambda表达式的主体生成代码.令我困惑的是如何在某处"放置"该代码并使其可调用.

lisp compiler-construction haskell language-design llvm

20
推荐指数
1
解决办法
3590
查看次数

使用MongoDB的Geospacial索引和3d数据

我有一组文档,每个文档都包含一个存储在MongoDB集合中的3空间点.MongoDB目前只有2个空间的地理空间索引.有没有办法利用Geospacial Index对3空间数据进行类似的查询?

algorithm geospatial mongodb

16
推荐指数
1
解决办法
3580
查看次数

将虚拟机设计与其主要编程语言相匹配

作为辅助项目的背景,我一直在阅读有关不同虚拟机设计的内容,其中JVM当然获得了最多的新闻.我还看了BEAM(Erlang),GHC的RTS(有点但不是很简单的VM)和一些JavaScript实现.Python也有一个字节码解释器,我知道存在,但没有读太多.

我没有找到的是一个很好的解释为什么为特定语言选择特定的虚拟机设计.我对那些适合并发和/或非常动态(Ruby,JavaScript,Lisp)语言的设计选择特别感兴趣.


编辑:在回答要求特异性的评论时,这是一个例子.JVM使用堆栈计算机而不是寄存器计算机,这在Java首次引入时非常有争议.事实证明,设计JVM的工程师已经完成了这样的平台可移植性,并且将堆栈机器转换回寄存器机器比克服虚拟寄存器太多或太少的阻抗不匹配更容易,更有效.

这是另一个例子:对于Haskell,要查看的论文是在库存硬件上实现懒惰的函数式语言:Spineless Tagless G-machine.这与我所知道的任何其他类型的VM非常不同.事实上GHC(Haskell的首要实现)并不是实时运行,而是用作编译的中间步骤.Peyton-Jones列出了不少于8个其他无效的虚拟机.我想了解为什么有些VM会在其他失败的情况下成功.

jvm language-design vm-implementation

16
推荐指数
1
解决办法
772
查看次数

如何从GHCi中的记录制作镜头

我想和Lens图书馆玩一下.我已将其加载到GHCi中并使用适当的下划线创建记录数据类型:

> data Foo a = Foo {_arg1 :: Int, _arg2 :: [a]}
Run Code Online (Sandbox Code Playgroud)

我想制作Foo使用makeLenses模板的镜头.我想这样做而不需要阅读整套Template-Haskell文档.

我可以在GHCi提示符下输入什么咒语来使其工作?

haskell ghci template-haskell haskell-lens

16
推荐指数
1
解决办法
994
查看次数

类型模式名称:R ab = Q(a - >(R ab,b))

我在这里寻找一些词汇.有许多形状具有通用名称.例如,L a = Empty | Cons a L通常称为"列表",而T a = Leaf a | Node (T a) (T a)"二叉树" St s a :: St (s->(a,s))则是状态Monad的形式.

我想知道这样的形状是否有一个名字:

data  R a b = Q (a -> (R a b,b))
Run Code Online (Sandbox Code Playgroud)

我在Arrow框架和State Machine实现中看到了这种模式.递归函数使它感觉有点像State Monad或Cont Monad.这也是除了唯一的结构(->)(>=>)为我所见过定义箭头的实例.

这个数据结构有一个共同的名称吗?

haskell types terminology data-structures

15
推荐指数
2
解决办法
488
查看次数