小编Joh*_*ler的帖子

类型模式名称:R ab = Q(a - >(R ab,b))

我在这里寻找一些词汇.有许多形状具有通用名称.例如,L a = Empty | Cons a L通常称为"列表",而T a = Leaf a | Node (T a) (T a)"二叉树" St s a :: St (s->(a,s))则是状态Monad的形式.

我想知道这样的形状是否有一个名字:

data  R a b = Q (a -> (R a b,b))
Run Code Online (Sandbox Code Playgroud)

我在Arrow框架和State Machine实现中看到了这种模式.递归函数使它感觉有点像State Monad或Cont Monad.这也是除了唯一的结构(->)(>=>)为我所见过定义箭头的实例.

这个数据结构有一个共同的名称吗?

haskell types terminology data-structures

15
推荐指数
2
解决办法
488
查看次数

为什么没有使用FingerTree来实现稳定的实现?

不久之前,我遇到了一篇关于FingerTrees的文章(另见附带的Stack Overflow问题),并提出了这个想法.我终于找到了使用它们的理由.

我的问题是,Data.FingerTree软件包似乎在边缘有点腐烂.此外,Containers包中的Data.Sequence使用数据结构重新实现(可能更好)版本,但不导出它.

由于理论上这个结构似乎很有用,但它似乎没有得到很多实际使用或关注.有人发现FingerTrees作为一个实际问题没有用处,或者这是一个不够关注的案例?


进一步说明:

我有兴趣构建一个包含具有良好串联属性的文本的数据结构.考虑从各种片段构建HTML文档.大多数预构建的解决方案使用字节串,但我真的想要正确处理Unicode文本的东西.我的计划是将Data.Text片段分层到FingerTree中.

我还想借用Data.Vector借用切片而无需使用(偏移,长度)操作进行复制.Data.Text.Text内置于数据类型,但仅用于高效的uncons和unsnoc opperations.在FingerTree中,这些信息很容易成为v树的注释或注释.

haskell finger-tree data-structures

15
推荐指数
3
解决办法
1713
查看次数

在Android中以编程方式删除色调颜色

我想以编程方式删除(重置)我已在XML布局中设置的ImageView Tint颜色.

android

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

一种在没有轮询的情况下在MVars上形成"选择"的方法

我有两个MVar(好吧是一个MVar和一个Chan).我需要从Chan中取出并处理它们,直到另一个MVar不再为空.我理想的解决方案就像UNIX select函数,我传入一个(可能是空的)MVar列表和线程块直到其中一个已满,然后它返回完整的MVar.尽量尝试我可以想到除了用isEmptyMVar重复轮询每个MVar之前没办法做到这一点,直到我弄错.这似乎效率低下.

一个不同的想法是使用throwTo,但它会中断线程中发生的事情,我需要以原子方式完成处理Chan的工作.

我正在打字的最后一个想法是为每个MVar创建一个新的forkIO,它试图读取它的MVar然后用自己的实例填充一个新创建的MVar.然后原始线程可以阻止该MVar.Haskell线程是否足够便宜,可以运行那么多?

concurrency haskell transactional-memory

14
推荐指数
2
解决办法
830
查看次数

我可以在GHCi中添加实例声明吗?

我正在搞乱,HashMap并试图用Data.Bson.ObjectId一把钥匙.当然,我发现Hashable该结构没有实例.没关系,因为写一个是微不足道的.1

instance Hashable ObjectId where hash (Oid x y) = hash (x,y)
Run Code Online (Sandbox Code Playgroud)

我将该行键入GHCi并被告知"输入`实例'上的解析错误".这实际上是有意义的,因为GHCi提示操作就好像在IO monad中将行键入到do块中,并且在此上下文中无法定义实例.

那么我的问题是,有没有办法在GHCi中定义一个新实例?


1为什么库不提供此实例是另一回事.我相信答案是限制依赖性,除了bson包已经依赖于太阳下的一切.

haskell typeclass ghc ghci

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

从ErrorT过渡到ExceptT

最近的cabal安装将我的变压器版本从0.3.0.0升级到0.4.1.0.通过此升级,出现了有关ErrorT的折旧警告.

文档不清楚这只是重命名还是功能上有变化?为什么要做出这种改变?

haskell monad-transformers

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

在Parsec,有没有办法防止lexeme消费换行?

所有解析器Text.Parsec.Token礼貌地用于lexeme在令牌之后吃空格.对我来说不幸的是,空格包括新行,我想将它用作表达式终止符.有没有办法说服lexeme新线?

haskell parsec

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

一起使用STM和数据库事务

我一直在使用Haskell的STM库,我非常喜欢编写事务的能力以及STM的一般"你不能得到这个错误"的特性.

有充分理由,STM不允许在事务中执行IO操作.无法重试IO操作.(在这里插入发射导弹参考).另一方面,数据库事务确实有一些非常相似的原子性保证.有没有可以接受的方式将两者结合使用?

database haskell stm

13
推荐指数
2
解决办法
887
查看次数

我可以使用Monad约束制作镜头吗?

上下文:这个问题具体参考Control.Lens(撰写本文时的版本3.9.1)

我一直在使用镜头库,能够读取和写入结构的一块(或遍历的碎片)是非常好的.然后我讨论了是否可以使用镜头来对抗外部数据库.当然,我需要在执行中执行IO Monad.所以概括:

题:

鉴于一个吸气剂(s -> m a)和一个定位器(b -> s -> m t)在哪里m是Monad,是否可以构造Lens s t a b镜头的Functor现在也包含在Monad中?是否仍然可以(.)与其他"纯功能"镜头组合使用?

例:

我可以让Lens (MVar a) (MVar b) a b 使用readMVarwithMVar

替代方案:

对于IOmonad中的容器是否有等效的Control.Lens,如MVarIORef(或STDIN)?

monads haskell haskell-lens

13
推荐指数
2
解决办法
1510
查看次数

什么"!!" 在哈斯克尔意味着什么?

Haskell wiki网站上有两个函数:

功能1

fib = (map fib' [0 ..] !!)
    where
      fib' 0 = 0
      fib' 1 = 1
      fib' n = fib (n - 1) + fib (n - 2)
Run Code Online (Sandbox Code Playgroud)

功能2

fib x = map fib' [0 ..] !! x
    where
      fib' 0 = 0
      fib' 1 = 1
      fib' n = fib (n - 1) + fib (n - 2)
Run Code Online (Sandbox Code Playgroud)

什么是"!!" 意思?

haskell

12
推荐指数
2
解决办法
6224
查看次数