小编bet*_*ros的帖子

一个不平凡的共生体是什么样的?

例如,在Haskell的distributive库文档中提到了Comonoids :

由于Haskell中缺少非平凡的共生,我们可以限制自己需要一个Functor而不是一些Coapplicative类.

经过一番搜索后,我发现了一个StackOverflow答案,它可以解释这一点,以及comonoids必须满足的规律.所以我想我理解为什么在Haskell中假设的Comonoid类型类只有一个可能的实例.

因此,为了找到一个非常重要的共生体,我想我们必须看一些其他类别.当然,如果类别理论家有共同体的名称,那么有一些有趣的.该页面上的其他答案似乎暗示了一个涉及的例子Supply,但我无法弄明白仍然满足法律.

我也转向维基百科:有一个Monoidmonoids 的页面没有引用类别理论,这在我看来是对Haskell的类型类的充分描述,但是"comonoid"重定向到一个类别理论描述的幺半群和共生组合,我可以不明白,似乎还没有任何有趣的例子.

所以我的问题是:

  1. 可以用像幺半群这样的非类别理论术语来解释共生体吗?
  2. 什么是一个有趣的comonoid的简单例子,即使它不是Haskell类型?(可以通过熟悉的Haskell monad在Kleisli类别中找到一个吗?)

编辑:我不知道,如果这实际上是类,理论上是正确的,但我在问题2的括号被想象为的非平凡的定义delete :: a -> m ()split :: a -> m (a, a)对一些特定 Haskell的类型a和Haskell单子m是满足的comonoid法律Kleisli箭头版本相关的答案.其他共生体的例子仍然受到欢迎.

haskell category-theory

33
推荐指数
2
解决办法
3647
查看次数

在多行块中设置GHCi提示

GHCi的提示可以设置如下,在我的.ghci:

:set prompt "?> "
Run Code Online (Sandbox Code Playgroud)

但是,多行块中会出现不同的提示,我无法弄清楚如何更改它.如果导入的模块太多,则完全无法读取:

?> :{
Prelude Control.Arrow Control.Applicative Control.Monad Control.Concurrent Control.Concurrent.Async Control.Parallel Data.String Data.Char Data.List Data.Maybe Data.Monoid Control.Monad.IO.Class|
Run Code Online (Sandbox Code Playgroud)

有没有办法设置这个辅助提示?或者,还有其他好方法以交互方式运行Haskell,其中多线表达式以更友好的方式显示吗?

haskell ghci

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

正确的方法强制转换可能a到a在榆树,没有明确失败的Nothings

好吧,我真正想做的是,我有一个数组,我想从中选择一个随机元素.显而易见的是从0和长度减1之间的随机数生成器获取一个整数,我已经工作了,然后应用Array.get,但返回一个Maybe a.(似乎还有一个包函数可以做同样的事情.)来自Haskell,我得到的类型意义是它保护我免受我的索引超出范围的情况,但我控制了索引而不是期待这种情况发生,所以我只想假设我得到了Just一些东西并且有点强行转换为a.在哈斯克尔fromJust,如果我感到冗长,那将是或者fromMaybe (error "some message").我应该怎么做榆树?

在邮件列表上发现了一个似乎正在讨论这个问题的讨论,但它已经有一段时间了,我没有在标准库中看到我想要的功能,而讨论表明它会是这样.

以下是我发现的一些非常不满意的潜在解决方案:

  • 只需使用默认.我确实有一个默认值aavailable,但我不喜欢这个,因为它给我的代码带来了完全错误的含义,并且可能会使调试变得更加困难.
  • 做一些摆弄端口与Javascript接口,并获得一个异常抛出,如果它没有.我还没有仔细研究它是如何工作的,但显然它是可能的.但这似乎混淆了过多的依赖关系,否则简单纯粹的榆树.

maybe elm

9
推荐指数
2
解决办法
3262
查看次数

标签 统计

haskell ×2

category-theory ×1

elm ×1

ghci ×1

maybe ×1