小编Rom*_*aka的帖子

重复使用导管是否安全?

使用相同的导管值执行多个操作是否安全?就像是

do
  let sink = sinkSocket sock

  something $$ sink
  somethingElse $$ sink
Run Code Online (Sandbox Code Playgroud)

我记得在导管的早期版本中有一些脏的黑客使得这不安全.现状是什么?

(注意sinkSocket不要关闭套接字.)

haskell conduit

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

TypeRep与"Type"GADT的关系

Scrap中你的样板重新加载,作者描述了一个新的Scrap Your Boilerplate演示文稿,它应该与原版相同.

然而,一个不同之处在于它们假设一组有限的,基本的"基础"类型,用GADT编码

data Type :: * -> * where
  Int :: Type Int
  List :: Type a -> Type [a]
  ...
Run Code Online (Sandbox Code Playgroud)

在原始SYB中,使用类型安全转换,使用Typeable类实现.

我的问题是:

  • 这两种方法之间有什么关系?
  • 为什么GADT表示被选为"SYB Reloaded"演示文稿?

haskell scrap-your-boilerplate

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

Control.Lens性能开销

我很欣赏Control.Lens包.它确实有助于稍微弱的Haskell记录语法.我正在研究图书馆的某些部分,其中表现是一个问题.有没有人知道如果有的话,使用通过类型类暴露的简单镜头(如下所示)与功能中的基本模式匹配相比会有什么性能损失?使用像这样的镜头有可能成为记录命名空间冲突问题的一个很好的工作.我可以自己设置一些基准测试,但是如果有人可以帮我解决问题,我很好奇.谢谢.

镜头课程

class LensX v where
  _x :: Functor f => (Double -> f Double) -> v -> f v

class LensY v where
  _y :: Functor f => (Double -> f Double) -> v -> f v

class LensZ v where
  _z :: Functor f => (Double -> f Double) -> v -> f v 
Run Code Online (Sandbox Code Playgroud)

镜头实例

instance LensX Vec3 where
  _x f (Vec3 x y z) = fmap (\x' -> Vec3 x' y z) (f x)

instance LensY Vec3 …
Run Code Online (Sandbox Code Playgroud)

performance haskell lenses

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

推动与拉动反应香蕉

我正在使用反应性香蕉构建类似媒体播放器的应用程序.

假设我想要一个Behavior代表曲目列表中当前所选曲目的曲目.

我有两个选择:用于fromPoll在需要时获取当前选择; 或使用fromChanges和订阅选择更改事件.

Behavior仅当用户按下"播放"按钮时才使用所选曲目.此事件比选择更改更为罕见.

鉴于此,我认为这fromPollfromChanges在这种情况下更好/更有效.但是文档说"获得Behaviors 的推荐方法是使用fromChanges".

它仍适用于此吗?即,轮询操作的执行频率是否超过网络实际使用(采样)的时间?

haskell frp reactive-programming reactive-banana

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

如何使用堆栈使用不同的ghc构建?

我想拥有相同版本的GHC的不同的,非ABI兼容的版本,并在不同的项目中使用它们.

(在我的例子中,构建之间的差异是整数 - 简单与gmp.)

本期中的评论显示了如何添加ghc的自定义风格stack-setup-2.yaml.但是,如何指定在每个特定情况或项目中使用哪个ghc构建?

即我正在寻找一个(更好的,两个):

  1. 能够指定stack.yaml是使用整数简单还是gmp构建.
  2. 能够及时指定stack build要生成的构建.

haskell ghc haskell-stack

7
推荐指数
2
解决办法
912
查看次数

这些流重定向如何工作?

这个 perldoc 页面

  1. 要一起捕获命令的 STDERR 和 STDOUT:

    $输出 = `cmd 2>&1`;
  2. 要捕获命令的 STDOUT 但丢弃其 STDERR:

    $output = `cmd 2>/dev/null`;
  3. 要捕获命令的 STDERR 但丢弃其 STDOUT(此处顺序很重要):

    $output = `cmd 2>&1 1>/dev/null`;
  4. 要交换命令的 STDOUT 和 STDERR 以捕获 STDERR,但保留其 STDOUT 以输出旧的 STDERR:

    $输出 = `cmd 3>&1 1>&2 2>&3 3>&-`;

我不明白3和4是如何工作的,我也不太确定我对1和2的理解是否正确。下面是我的理解。有不对的地方请指正。

我知道012象征STDINSTDOUTSTDERR

  1. 将 2 重定向到 1,以便它们现在都使用相同的流(&转义1以确保STDERR不会重定向到名为的文件1

  2. 将 2 (STDERR) 重定向到空流,以便它被丢弃

  3. 我不明白这个。难道不应该只是

    $output = `cmd …

bash shell io-redirection

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

如何使用IO函数转换事件?

让我说我有

e1 :: Event t A
f  :: A -> IO B
Run Code Online (Sandbox Code Playgroud)

我想创造

e2 :: Event t B
Run Code Online (Sandbox Code Playgroud)

这是由触发e1它们的值由执行确定,并且f上的值e1在事件发生的时间.

通过动态事件切换和使用处理程序,我看到了两种可能的方法,但是对于这么简单的事情,它们看起来都太复杂了.

这样做的正确方法是什么?

haskell frp reactive-banana

5
推荐指数
0
解决办法
183
查看次数

并行树搜索

假设我有一个懒惰Tree的叶子可能解决问题的方法

data Tree a = Node [Tree a] | Leaf (Maybe a)
Run Code Online (Sandbox Code Playgroud)

我需要找到一个解决方案(或者发现没有解决方案).

我有一台P -core机器.从时间和内存效率的考虑,只有并行搜索P个不同的分支才有意义.

例如,假设您有四个具有大约相同计算复杂度的分支(对应于CPU时间的T秒),并且每个分支都有一个答案.

如果你在双核机器上真正并行评估所有四个分支,那么它们都将在大约2T秒内完成.

如果你只评估前两个分支并推迟其他两个分支,那么你只需要T秒就能得到答案,同时使用两倍的内存.

我的问题是,是否可以使用任何并行Haskell基础结构(Par monad,并行策略......)来实现这一目标,还是必须使用像async这样的低级工具?

parallel-processing haskell

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

将位置推送到跳转列表

我的vim插件有一个跳转到不同位置的命令(就像标签一样).

我使用的cursor功能.

如何在跳转列表中记录以前的位置,以便Ctrl+O按预期工作?

vim vim-plugin

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

为什么有数组的调用约定?

我正在阅读System V应用程序二进制接口,有一部分是我无法理解的.

首先,该文件指出

没有尝试为C以外的语言指定ABI

(第10页).

稍后,在第20页,数组分为MEMORY,POINTER等:

聚合(结构和数组)和联合类型的分类如下:
...

然后使用分类来定义调用约定 - 它们的值和边界如何传递给函数并从函数返回.如果我正确读取算法,则可以将数组分类为INTEGER,MEMORY或SSE.

但是在C语言中,数组总是作为指针传递和返回.那么为什么对数组进行分类以及在哪种情况下数组类很重要呢?

c arrays x86-64 calling-convention

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