小编Joh*_*ler的帖子

用于返回带有修改字段的Haskell记录的函数

鉴于:

data MyRecord a = MyRecord{list :: [a], other_fields :: Char, …}
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个函数,它将一个新a的列表放入并返回一个新的MyRecord:

pushOntoList :: a -> MyRecord -> MyRecord
Run Code Online (Sandbox Code Playgroud)

问题:

有没有一种方法可以写出pushOntoList这样的方式,它不依赖于记录的其余部分,而只是简单地将其修改为未经修改?

问这个问题的另一种方法是你可以在pushOntoList不看清楚其余MyRecord定义的情况下编写吗?

syntax haskell record

12
推荐指数
1
解决办法
4575
查看次数

什么"!!" 在哈斯克尔意味着什么?

Haskell wiki网站上有两个函数:

功能1

fib = (map fib' [0 ..] !!)
    where
      fib' 0 = 0
      fib' 1 = 1
      fib' n = fib (n - 1) + fib (n - 2)
Run Code Online (Sandbox Code Playgroud)

功能2

fib x = map fib' [0 ..] !! x
    where
      fib' 0 = 0
      fib' 1 = 1
      fib' n = fib (n - 1) + fib (n - 2)
Run Code Online (Sandbox Code Playgroud)

什么是"!!" 意思?

haskell

12
推荐指数
2
解决办法
6224
查看次数

在RSpec中检查(不存在)`puts`

我在ruby项目中使用rspec进行测试,并且我想规定在使用-q选项时我的程序不应输出任何内容.我试过了:

Kernel.should_not_receive :puts
Run Code Online (Sandbox Code Playgroud)

当输出到控制台时,这不会导致测试失败.

如何验证文本输出的缺失?

ruby tdd bdd rspec mocking

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

在Ruby中使用Unix进程控制方法

Ryan Tomayko用这篇关于使用Unix进程控制命令的文章引发了一场火灾风暴.

我们应该做更多这方面的事情.更多这一点.我在谈论fork(2),execve(2),pipe(2),socketpair(2),select(2),kill(2),sigaction(2)等等.这些是我们的朋友.他们非常想要帮助我们.

我有一些代码(delayed_jobDataMapper的一个克隆,我认为它适合这个,但我不清楚如何利用列出的命令.有关如何改进此代码的任何想法?

def start
  say "*** Starting job worker #{@name}"
  t = Thread.new do
    loop do
      delay = Update.work_off(self)
      break if $exit
      sleep delay
      break if $exit
    end
    clear_locks
  end

  trap('TERM') { terminate_with t }
  trap('INT')  { terminate_with t }

  trap('USR1') do
    say "Wakeup Signal Caught"
    t.run
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby unix fork process-control

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

扫描令牌使分析器复杂化时的跟踪位置

我正在编写一个两遍解析器,我首先将文本扫描到令牌(使用Alex),然后解析这些令牌(使用Parsec).一切顺利,直到我尝试将位置信息添加到令牌,以便我可以写出一个好的错误消息.

原来我有:

data Token = TAtom | TString String | TInt Integer | TFloat [...]
Run Code Online (Sandbox Code Playgroud)

看起来我可以Position为每个Token构造函数添加一个元素,也可以创建一个新类型data TokenWithPosition = T Token Position.

我已经开始了后一条路径,但现在我有一个问题,就是TokenWithPosition当我想在Parsec中描述一个令牌时必须创建一个假位置,或者我TokenWithPosition每次想要进行比较时都需要打开它.简而言之,我的漂亮干净语法正在被忽略位置信息所需的代码溢出.

所以我的问题是:有没有一种干净的方法来跟踪位置信息而不会在第二次传递中使解析器复杂化?这似乎是一个标准解决方案.

parsing haskell

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

Haskell STM检查函数返回undefined

有没有一个很好的理由为什么库check中的Contol.Concurent.STM函数具有类型Bool -> STM a并且返回undefined成功而不是具有类型Bool -> STM ()?它实现的方式是类型检查器将polity编译一个do块结束,check foo只是在运行时失败*** Exception: Prelude.undefined.

haskell ghc stm

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

从手指树文章中找到丢失'减少'类型类

昨天的WikibenderComonads上的stackoverflow问题开始,最终出现在MarkCC关于Finger Trees 文章中.

在文章中,他广泛使用了Reduce类型类.他写了关于这个类型类的文章,好像它是一个非常常见且经常使用的库,但我无法在hackage上找到它,也无法找到足够的文档来真正理解代码.

有人可以帮助我理解Reduce类型类正在做什么,(-<)(>-)运算符如何工作,以及应该告诉我文章中的代码(下面复制)?


手指树完成的代码清单(我希望):

清单1:Node的实例声明

instance Reduce Node where
  reducer (-<) (Node2 a b) z = a -< (b -< z)
  reducer (-<) (Node3 a b c) z = a -< (b -< (c -< z))
  reducer (>-) (Node2 b a) = (z >- b) >- a
  reducer (>-) (Node3 c b a) = ((z >- …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass finger-tree

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

Contt Monad:将各个部分放在一起

前言

我试图围绕如何实际使用ContTcallCC有用的东西.我无法跟踪代码周围的信息和控制流程.(但是,这不是延续的意义吗?)

有很多不同的方法可以用这个monad和少量非常直接的组合器来移动碎片.我将承认我对ContT的工作方式的理解仍感到不安,但我会指出我到目前为止所阅读的内容:

我想做的是发布一个psudo-code示例,然后询问一些有关它的问题.这代表使用ContT的典型代码外观

Psudo码

type MyMonad r = ContT r (State SomeState)

main = do
  runState s_init $ runContT block print

block :: MyMonad r a0
block = do
  before_callcc
  output <- callCC $ \k -> do
    rval <- inner_block
    return rval
  after_callcc
Run Code Online (Sandbox Code Playgroud)

问题

  1. 是什么决定了它的价值和类型output
  2. b这种类型的意思是k什么?
  3. 给予的价值在k哪里?
  4. 什么时候inner_block运行?它看到的是什么版本的州?
  5. 哪里rval去了,它的类型是什么?
  6. k和之间有什么关系rval? …

continuations haskell callcc

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

datamapper多字段唯一索引

在Datamapper中,如何指定两个字段的组合必须是唯一的.例如,类别必须在域中具有唯一名称:

class Category
  include DataMapper.resource
  property :name, String, :index=>true #must be unique for a given domain

  belongs_to :domain
end
Run Code Online (Sandbox Code Playgroud)

ruby indexing datamapper

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

如何在Elm 0.19中使用websockets

我正在尝试从0.18升级到0.19的Elm.我的项目取决于elm-lang/websocket0.18?我似乎无法在0.19中找到相应的包.我错过了什么?

websocket elm

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