小编Joh*_*ler的帖子

Haskell哈希实现,不存在于IO monad中

我正在寻找一个有点像Data.HashTable但不受IO monad阻碍的数据结构.目前,我正在使用[(key,val)].我想要一个结构为O(log n),其中n是键值对的数量.

与必须读取的频率相比,该结构不经常构建,并且在构建时,我可以同时获得所有键值对.String如果这会产生影响,那么关键是s.

知道以什么尺寸离开[(键,val)]也是很好的.

haskell hashtable data-structures

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

在Servant库中解密DataKind类型提升

我想戈克该教程仆人库,类型级Web DSL.该库广泛使用DataKind语言扩展.

在该教程的早期,我们找到以下定义Web服务端点的行:

type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]
Run Code Online (Sandbox Code Playgroud)

我不明白在类型签名中包含字符串和数组意味着什么.我也不清楚刻度线(')在前面是什么意思'[JSON].

所以我的问题归结为是什么类型/类型的字符串和数组,而这是怎么后来当它变成了WAI终点解释?


作为旁注,一致使用NatVect描述DataKinds时,我们会在尝试理解这些内容时看到令人沮丧的有限例子.我想我已经在不同的地方至少读了十几次这个例子,我仍然觉得我不明白发生了什么.

haskell data-kinds servant

6
推荐指数
2
解决办法
272
查看次数

ActiveRecord中的update_all方法是否返回行数?

我想在行上设置"锁定"列,如果它尚未设置的话.竞争条件很可能并且性能很重要,因此必须在单个查询中完成.我认为解决方案应该如下所示:

class MyModel
  def lock(worker)
    cnt = MyModel.where(id: self.id, lock: nil).update_all(:lock=>worker.name)
    cnt == 1
  end
end
Run Code Online (Sandbox Code Playgroud)

update_all方法实际上是否像在DataMapper中那样返回受影响的行数?

activerecord ruby-on-rails ruby-on-rails-3

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

Haskell中的包,模块和导入

我对Haskell很新.有人会解释代码组织在Haskell中的工作原理吗?到目前为止,我已将所有内容都写在一个很长的文件中,并测试了来自GHCi的代码.我想开始编写测试,将我的代码重构为逻辑单元.关于如何在很多地方做到这一点有点点零碎,但没有什么全面的.

请解释包,模块和import语句如何工作,然后告诉我如何使用它们将代码组织到一个更大的,测试驱动的项目中.

haskell

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

创建递归地包含彼此的抽象数据类型的实例

给定两种日期类型定义如下:

data Foo = Foo Bar String
data Bar = Bar Foo String
Run Code Online (Sandbox Code Playgroud)

我怎样才能使foobar这样fooFoo bar "foo"barBar foo "bar"

当我们将类型更改为:

data Foo = Foo Bar (MVar String)
data Bar = Bar Foo (MVar String)
Run Code Online (Sandbox Code Playgroud)

recursion haskell abstract-data-type data-structures

5
推荐指数
2
解决办法
266
查看次数

正在搜索丢失的镜头状态组合器

我目前的代码如下所示:

do
  x <- use foo
  foo <~ runFoo x
Run Code Online (Sandbox Code Playgroud)

在哪里fooLens一个Foo领域和runFoo :: MonadState m => Foo -> m Foo

我认为应该有一种方法可以在一行中执行此操作,但我找不到它.我认为它应该有一个评论:

(????) :: MonadState s m => Lens' s a -> (a -> m a) -> m a
Run Code Online (Sandbox Code Playgroud)

问题:

  • 这样的组合子存在吗?如果是这样的话是什么?
  • 当我遇到这样的另一个问题时,搜索它的最佳方法是什么(即通常我只是将其键入到Hoogle中,但我没有用镜头库做好运)
  • 这实际上是Control.Monad中的原始组合器吗?(如果这是kleisli箭头的另一项工作,我会有点尴尬)

haskell state-monad lenses haskell-lens

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

如何将命令行选项传递给Cabal中的Alex

在我当前的项目中,我有一个Tokens.x需要Tokens.hs由Alex 编译的文件.在我的.cabal文件中,我已Tokens在该other-modules部分中列出,并cabal build愉快地创建该文件.

但是,如果没有-g选项指示Alex创建文件的GHC优化版本,它就会这样做.与GHC一起使用时,此选项表示扫描速度提高了10倍,编译速度也快了一个数量级.

在使用GHC进行编译时,如何告诉cabal包含-g选项?

haskell cabal alex

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

实现Birdson的Poisson-Disc分布时使用哪种数据结构

我正在尝试( :: (Float,Float))使用Haskell 编写一个使用Poisson-disc分布创建一组点的函数.我使用Birdson的算法描述迈克·博斯托克的博客.

点保持在网格中,使得每个单元永远不会超过一个点.通过这样做,最近邻居问题从O(n)减少到O(1).

我的问题是这个网格使用什么样的数据结构.JavaScript使用可变数组和for循环,因为命令式语言倾向于这样做.我可以使用Vectors复制这种方法,但我觉得可能有更好的功能数据结构.

什么结构可能适合这个网格?这是一个使用Comonads的地方吗?

haskell data-structures

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

在Haskell中命名字段值和本地范围之间的冲突

这是一个编码风格的问题而不是技术问题.

我经常遇到一个问题,我使用haskell(不太理想)的记录语法(或镜头,问题最终相同)来创建一个data类型.我最终得到了以我的字段命名的字段访问器函数.作为一名尽职尽责的程序员,我试图使我的记录字段名称有意义.

稍后我需要从我的类型中获取一个字段并将其值保存在局部变量中.这通常在do块中的StateMonad中完成.问题是我称之为局部变量.最明显的名称已被视为字段访问者.我发现我的自我使用缩写,这往往会使我的代码可读性降低.

是否存在解决此问题的Haskell编码约定?

data Qaax = Qaax {
      foo :: SomeFoo
    , bar :: SomeBar
    , ...
    }

baz :: (MonadState Qaax m) => (...) -> m ()
baz (...) = do
  f <- gets foo -- I'd really like to use something more descriptive then
                -- `f` but `foo` is already taken.
  ...
  return ()
Run Code Online (Sandbox Code Playgroud)

haskell coding-style naming-conventions

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

将Haste集成到Stack工具链中

我正在为一个项目使用Haskell Stack,我想包括Haste it编译客户端逻辑。我喜欢Stack可以抽象出环境之间不同的构建和安装问题的事实,如果它构建在我的计算机上,它将构建在其他人的计算机上。

如何将急速集成到Stack工具链中?制定一次设置很好,但是我不想每次将代码移至新系统时都必须重新创建整个工具链。

haskell haste haskell-stack

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