小编Tet*_*igi的帖子

如何在Haskell中的数据结构中获得恒定时间访问(如在数组中)?

我会直接了解它 - 有没有办法在Haskell中拥有一个动态大小的恒定时间访问数据结构,就像任何其他命令式语言中的数组一样?

我确信在某个地方有一个模块可以为我们神奇地做到这一点,但我希望能以一种功能性的方式对一个人如何做到这一点的一般解释:)

据我所知,Map使用二叉树表示,因此它具有O(log(n))访问时间,当然列表具有O(n)访问时间.

另外,如果我们这样做它是不可变的,它会是纯粹的,对吧?

任何想法我怎么可能去做(超出Array = Array { one :: Int, two :: Int, three :: Int ...}模板Haskell之类的东西)?

haskell

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

我可以创建一个消耗所有生产者输出的管道并将其作为列表传递吗?

我正在尝试使用Pipes库来建模工作流程.在那个工作流程中,我想积累生产者的所有输出,然后传递它.在这种情况下,我知道我的制作人产生了有限的输出量.

所以,如果我有:

prod :: Producer a m ()
accum :: Pipe a [a] m r
groupConsumer :: Consumer [a] m r
Run Code Online (Sandbox Code Playgroud)

我如何建模accum以便我能做到:

runEffect $ prod >-> accum >-> groupConsumer
Run Code Online (Sandbox Code Playgroud)

谢谢!

haskell

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

Yesod脚手架网站缓慢释放数据库池连接

UPDATE

我已经通过脚手架创建的实际项目简化了演示 - 您可以在这里查看:https://github.com/tetigi/yesod-bug-test

按照README设置repo并复制问题!谢谢 :)

原始邮政

我最近一直在尝试使用yesod创建一个简单的网站 - 在一个特定的处理程序中,它会进行一些runDB调用(选择并将一些值插入到~200项DB中).但是,在中等负载上,例如在浏览器中快速重新加载页面,页面开始挂起.

做一些调试,我发现似乎yes应用程序没有及时释放与数据库池的连接,最终等待它们发布.为了解决这个问题,我发现了以下其他事情:

  • 将数据库池减少到2只会在几次点击后冻结
  • 单击约5秒后,默认值(10)冻结
  • 将数据库池增加到100会给我一个更长的点击时间,最多可以快速点击大约10-15秒
  • 无论我使用的是postgres还是sqlite,问题都是一样的
  • 在postgres中,有可能看到'COMMIT'交易随着时间的推移而堆积起来
  • 随着时间的推移,这些交易最终会消失,网站将再次响应

这里有什么我想念的吗?网页没有做任何复杂的事情,因为下面的代码段会显示.有任何想法吗?目前,该网站将无法用于多个用户,直到我找到解决方法!

我正在使用标准的scaffolded yesod应用程序堆栈,如文档中所建议的那样.

干杯!

卢克

示例处理程序代码(删节)

getCompareR :: Handler Html
getCompareR = do

    -- Get all entities from the db. Throws error if < 2 elems in the DB.
    entities <- fmap (\xs -> assert (length xs >= 2) xs) $ runDB $ selectList [] []

    -- Pick an entity at random
    Entity _ thisThingEntity <- liftIO $ runRVar (choice …
Run Code Online (Sandbox Code Playgroud)

haskell yesod

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

是否可以在 Spring Shell 中使用制表符补全值?

我目前正在尝试改进 Spring Shell 应用程序,而使其变得更好的一件事是它是否支持值和选项的制表符补全。

举个例子,如果我的 CLI 有一个命令getInfo --name <name>,其中<name>是数据库中有限名称集中的一个名称,那么能够很方便地执行以下操作

> getInfo --name Lu<tab>
  Lucy Luke Lulu
> getInfo --name Luk<tab>
> getInfo --name Luke
Run Code Online (Sandbox Code Playgroud)

有没有办法使用现有的 Spring Shell 工具来做到这一点?我浏览了文档,但找不到任何有关自动完成值的信息。

干杯!

java shell spring spring-shell

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

在Haskell中调用Python代码

我有一堆(或将有一堆)使用OpenCV库和SimpleCV的Python代码.我还有一堆Haskell代码可以执行其他一些操作,但是想调用我在Python中定义的一个函数.这一个函数返回三元组的双精度数.

在Haskell中调用此函数的最佳方法是什么?

例如,一个简化的例子是我在Python中有一个函数

# foo.py
import SimpleCV

def foo():
   return (1.0,2.0,3.0)
Run Code Online (Sandbox Code Playgroud)

我希望能够在Haskell中做到这一点

-- bar.hs

main = do
  putStrLn $ show pyThingy.foo
Run Code Online (Sandbox Code Playgroud)

我尝试过使用MissingPy(http://hackage.haskell.org/package/MissingPy),但每当我尝试导入本地文件时,我都会得到

*** Exception: <<MissingPy.Python.Types.PyException>>
Run Code Online (Sandbox Code Playgroud)

谢谢!

python haskell

4
推荐指数
1
解决办法
766
查看次数

Aeson不会使用unicode字符解码字符串

我正在尝试使用Data.Aeson(https://hackage.haskell.org/package/aeson-0.6.1.0/docs/Data-Aeson.html)来解码一些JSON字符串,但它无法解析字符串包含非标准字符.

例如,文件:

import Data.Aeson
import Data.ByteString.Lazy.Char8 (pack)

test1 :: Maybe Value
test1 = decode $ pack "{ \"foo\": \"bar\"}"

test2 :: Maybe Value
test2 = decode $ pack "{ \"foo\": \"bòz\"}"
Run Code Online (Sandbox Code Playgroud)

在ghci中运行时,会得到以下结果:

*Main> :l ~/test.hs
[1 of 1] Compiling Main             ( /Users/ltomlin/test.hs, interpreted )
Ok, modules loaded: Main.
*Main> test1
Just (Object fromList [("foo",String "bar")])
*Main> test2
Nothing
Run Code Online (Sandbox Code Playgroud)

有没有理由不解析带有unicode字符的String?我的印象是Haskell与unicode相当不错.任何建议将不胜感激!

谢谢,

tetigi

编辑

经过进一步调查后eitherDecode,我收到以下错误消息:

 *Main> test2
 Left "Failed reading: Cannot decode byte '\\x61': Data.Text.Encoding.decodeUtf8: Invalid UTF-8 stream" …
Run Code Online (Sandbox Code Playgroud)

unicode haskell aeson

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

标签 统计

haskell ×5

aeson ×1

java ×1

python ×1

shell ×1

spring ×1

spring-shell ×1

unicode ×1

yesod ×1