小编Gab*_*lez的帖子

约束类型类或实例的派生变量

我正在为我的pipes库编写一个类型类来定义Proxy类似于抽象的接口.类型类看起来像:

class ProxyC p where
    idT   :: (Monad m) => b' -> p a' a b' b m r
    (<-<) :: (Monad m)
          => (c' -> p b' b c' c m r)
          -> (b' -> p a' a b' b m r)
          -> (c' -> p a' a c' c m r)
    ... -- other methods
Run Code Online (Sandbox Code Playgroud)

我也在编写以下形式的扩展名Proxy:

instance (ProxyC p) => ProxyC (SomeExtension p) where ....
Run Code Online (Sandbox Code Playgroud)

......我想这些情况,以能够施加额外的约束,如果m是Monad则p a' …

haskell

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

管道和非管道代码之间的并发考虑

我正在为管道接口中的某些编码包装C库,但我已经做了一些需要做出的设计决策.

在设置C库之后,我们保持编码器上下文.有了这个,我们可以编码,或者改变一些参数(让我们将Haskell接口调用到最后一个函数tune :: Context -> Int -> IO ()).我的问题分为两部分:

  1. 编码部分很容易包装成一个Pipe Foo Bar IO (),但我也想曝光tune.由于编码上下文的同时使用必须受到锁定保护,因此我需要在管道中的每次迭代时锁定,并tune使用相同的锁进行保护.但现在我觉得我正在强迫用户隐藏锁定.我在这里吠叫错了吗?这种情况通常如何在管道生态系统中得到解决?在我的情况下,我希望我的特定代码所属的管道始终在其自己的线程中运行,同时进行调整,但我不想强迫任何用户使用这种观点.管道生态系统中的其他软件包似乎也不会强迫用户使用.
  2. 不再使用的编码上下文需要正确地去初始化.在管道生态系统中,如何确保IO在管道被破坏时处理这些事情(在这种情况下执行som 动作)?

一个具体的例子是包装压缩库,在这种情况下,上面可以是:

  1. 压缩强度是可调的.我们设置了管道并快速运行.假设必须序列化对压缩编解码器上下文的并发访问,那么最好如何在管道保持运行时允许更改压缩强度设置?
  2. 压缩库在设置时从Haskell堆中分配了一堆内存,当管道被拆除时,我们需要调用一些库函数来清理它.

谢谢......这可能都很明显,但我对管道生态系统还很陌生.

编辑:发帖后阅读,我很确定这是我在这里问过的最模糊的问题.啊! 对不起;-)

haskell api-design haskell-pipes

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

存在量化类型类

什么是等效于以下存在量化字典的Pipe类型类,受类型的启发:

{-# LANGUAGE ExistentialQuantification, PolymorphicComponents #-}

data PipeD p = forall cat . PipeD {
    isoI        :: forall a b   m r . Iso (->) (p a b m r) (cat m r a b),
    categoryI   :: forall       m r . (Monad m) => CategoryI (cat m r)  ,
    monadI      :: forall a b   m   . (Monad m) => MonadI (p a b m)     ,
    monadTransI :: forall a b       . MonadTransI (p a b)               }
Run Code Online (Sandbox Code Playgroud)

我想要的粗略想法是试图说,给定(PipeLike …

haskell

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

`-O99`标志有什么作用?

标题是一个轻微的笑话.

我今天刚刚发现,在ghc没有抱怨的情况下接受任何优化级别.我知道这-O2应该是最大的优化级别,并且-O3 这里有一个提议,但我只是好奇当你错误地指定更高的优化级别时会发生什么.是ghc默认-O2还是不优化?

haskell ghc

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

标签 统计

haskell ×4

api-design ×1

ghc ×1

haskell-pipes ×1