我正在寻找一个有点像Data.HashTable
但不受IO monad阻碍的数据结构.目前,我正在使用[(key,val)].我想要一个结构为O(log n),其中n是键值对的数量.
与必须读取的频率相比,该结构不经常构建,并且在构建时,我可以同时获得所有键值对.String
如果这会产生影响,那么关键是s.
知道以什么尺寸离开[(键,val)]也是很好的.
我想戈克该教程的仆人库,类型级Web DSL.该库广泛使用DataKind
语言扩展.
在该教程的早期,我们找到以下定义Web服务端点的行:
type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]
Run Code Online (Sandbox Code Playgroud)
我不明白在类型签名中包含字符串和数组意味着什么.我也不清楚刻度线('
)在前面是什么意思'[JSON]
.
所以我的问题归结为是什么类型/类型的字符串和数组,而这是怎么后来当它变成了WAI终点解释?
作为旁注,一致使用Nat
和Vect
描述DataKinds
时,我们会在尝试理解这些内容时看到令人沮丧的有限例子.我想我已经在不同的地方至少读了十几次这个例子,我仍然觉得我不明白发生了什么.
我想在行上设置"锁定"列,如果它尚未设置的话.竞争条件很可能并且性能很重要,因此必须在单个查询中完成.我认为解决方案应该如下所示:
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中那样返回受影响的行数?
我对Haskell很新.有人会解释代码组织在Haskell中的工作原理吗?到目前为止,我已将所有内容都写在一个很长的文件中,并测试了来自GHCi的代码.我想开始编写测试,将我的代码重构为逻辑单元.关于如何在很多地方做到这一点有点点零碎,但没有什么全面的.
请解释包,模块和import语句如何工作,然后告诉我如何使用它们将代码组织到一个更大的,测试驱动的项目中.
给定两种日期类型定义如下:
data Foo = Foo Bar String
data Bar = Bar Foo String
Run Code Online (Sandbox Code Playgroud)
我怎样才能使foo
和bar
这样foo
是Foo bar "foo"
和bar
是Bar foo "bar"
?
当我们将类型更改为:
data Foo = Foo Bar (MVar String)
data Bar = Bar Foo (MVar String)
Run Code Online (Sandbox Code Playgroud) 我目前的代码如下所示:
do
x <- use foo
foo <~ runFoo x
Run Code Online (Sandbox Code Playgroud)
在哪里foo
是Lens
一个Foo
领域和runFoo :: MonadState m => Foo -> m Foo
我认为应该有一种方法可以在一行中执行此操作,但我找不到它.我认为它应该有一个评论:
(????) :: MonadState s m => Lens' s a -> (a -> m a) -> m a
Run Code Online (Sandbox Code Playgroud)
问题:
在我当前的项目中,我有一个Tokens.x
需要Tokens.hs
由Alex 编译的文件.在我的.cabal
文件中,我已Tokens
在该other-modules
部分中列出,并cabal build
愉快地创建该文件.
但是,如果没有-g选项指示Alex创建文件的GHC优化版本,它就会这样做.与GHC一起使用时,此选项表示扫描速度提高了10倍,编译速度也快了一个数量级.
在使用GHC进行编译时,如何告诉cabal包含-g选项?
我正在尝试( :: (Float,Float))
使用Haskell 编写一个使用Poisson-disc分布创建一组点的函数.我使用Birdson的算法如描述的迈克·博斯托克的博客.
点保持在网格中,使得每个单元永远不会超过一个点.通过这样做,最近邻居问题从O(n)减少到O(1).
我的问题是这个网格使用什么样的数据结构.JavaScript使用可变数组和for循环,因为命令式语言倾向于这样做.我可以使用Vectors复制这种方法,但我觉得可能有更好的功能数据结构.
什么结构可能适合这个网格?这是一个使用Comonads的地方吗?
这是一个编码风格的问题而不是技术问题.
我经常遇到一个问题,我使用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 Stack,我想包括Haste it编译客户端逻辑。我喜欢Stack可以抽象出环境之间不同的构建和安装问题的事实,如果它构建在我的计算机上,它将构建在其他人的计算机上。
如何将急速集成到Stack工具链中?制定一次设置很好,但是我不想每次将代码移至新系统时都必须重新创建整个工具链。
haskell ×9
activerecord ×1
alex ×1
cabal ×1
coding-style ×1
data-kinds ×1
hashtable ×1
haskell-lens ×1
haste ×1
lenses ×1
recursion ×1
servant ×1
state-monad ×1