小编Mik*_*cki的帖子

由于curry,arity-n的功能真的只是一个n类吗?它们可以制成一个类别吗?

在我真正问到它之前,这个问题有一个很长的前奏:)

假设类型A和B代表类别,然后是函数

f :: B - > A.

是两个类别之间的态射.我们可以创建一个新的类别,其中A和B为对象,f为箭头,如下所示:

在此输入图像描述

现在,让我们介绍一个新的类别C和函数g:

g :: C - > B - > A.

我希望能够在上面的类别中添加C和g,但我不确定如何做到这一点.直观地说,我想要一些看起来像这样的东西:

在此输入图像描述

但我以前从未在类别图中看到类似的东西.为了使这个犹太人,我可以引入一个虚拟箭头g'并构建一个像这样的2类:

在此输入图像描述

但这似乎是一幅钝画.(当然,我们可以使用我上面提到的图片作为正确的图片的速记.)此外,它不再完全清楚g和g'甚至是什么.g不再是一个函数,它将类别C作为输入并返回一个态射:: B - > A.相反,

g'::(C - > C)

g ::(C - > C) - >(B - > A)

如果我们传递g身份,那么一切都会正常.但是,如果我们通过其他一些功能,那么谁知道会发生什么?

所以我的问题是:n类中的n-arrow真的是我们应该考虑arity n函数的方式吗?或者是否有一些更简单的方法将此功能表示为我错过的标准类别?

haskell currying category-theory arity

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

是否可以注释函数的特殊属性(例如,主观性)?

假设我有更高阶的功能f :: (a -> b) -> (a -> b).但f只有在输入函数是满射的情况下才能正常运行.反正有没有迫使这种情况发生在Haskell?例如,我真的希望f类型签名是这样的:

f :: (Surjective (a -> b)) => (a -> b) -> (a -> b)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为我不希望a -> b声明该类型的所有函数都是满射的,只是其中的一部分.例如,可以f将满射函数转换为非满射函数.

我们可以将函数包装在一个特殊的数据类型中data Surjective f = Surjective f,然后定义

f :: Surjective (a -> b) -> (a -> b)
Run Code Online (Sandbox Code Playgroud)

但这会使很难为函数分配多个属性.

在练习中有没有方便的方法呢?这在理论上是否可行?

haskell types higher-order-functions

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

你如何证明一个函数对于它的类型是唯一的?

id是类型的唯一功能a -> a,和 fst类型的唯一功能(a,b) -> a.在这些简单的情况下,这是非常简单的.但总的来说,你会如何证明这一点?如果有多个相同类型的可能功能怎么办?

或者,给定函数的类型,如何导出该类型的唯一(如果这是真的)函数?

编辑:我特别感兴趣的是当我们开始在类型中添加约束时会发生什么.

haskell types proof

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

Functor类型背后的历史是什么?

我试图深入理解Monad类的层次结构.当然,部分原因是看到了很多例子,但我对这些课程的首次发现历史及其动机特别感兴趣.

我知道Monad最初是作为Haskell中IO问题的解决方案,并且熟悉Moggi和Wadler在1989 - 92年引入它们的论文.

我还看到Applicatives了Conor McBride和Ross Paterson的"有效的应用程序设计"的介绍.

我的问题是什么推广Functor,他们什么时候出现?我认为它必须是Monad因为Functor它不是一个超类,但是从LISP的早期开始就没有人使用广义的地图函数?

haskell functor category-theory

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

它不是单子,但它是什么?

根据Haskell wikibook,一个Monad被调用的mFunctor另外两个操作:

unit :: a -> m a
join :: m (m a) -> m a
Run Code Online (Sandbox Code Playgroud)

这很好,但我有一些不同的东西.粉饰血淋淋的细节,我有一个具有良好的类型unitjoin功能,但它fmap没有得到很好的表现(fmap g . fmap f不一定fmap (g.f)).因此,它不能成为一个实例Monad.尽管如此,我还是希望尽可能多地提供通用功能.

所以我的问题是,什么类别的理论结构与monad相似,因为他们有a unitjoin

我意识到在某种程度上,上述问题是不明确的.对于monad而言unit,join定义仅在fmap定义方面有意义.没有fmap,你不能定义任何monad法则,所以任何unit/的定义join都同样"有效".所以我正在寻找除了fmap在这些unitjoin函数上定义一些"非monad"定律可能有意义的函数.

monads haskell category-theory

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

如何在lhs2TeX中隐藏代码块?

我想使用latex记录我的代码,但是在乳胶文档的开头显示所有这些模块和编译器扩展非常烦人.是否有一些标志我可以传递给lhs2TeX以防止它在pdf中显示这部分代码,同时仍然让ghc看到代码?

这似乎是一个非常基本的功能,但我在手册中找不到它.

haskell literate-programming

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

是否可以在不调用析构函数的情况下删除c ++中的对象?

我有一个对象,里面有一些指针.析构函数调用delete这些指针.但有时我想删除它们,有时我不删除它们.所以我希望能够在调用析构函数的情况下删除对象.这可能吗?

编辑:我意识到这是一个绝对的想法,没有人应该这样做.尽管如此,我想这样做是因为它会使一些内部函数更容易编写.

c++ destructor memory-management

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

为什么差异列表不是可折叠的实例?

DLIST包包含DList数据类型,它有大量的实例,但不是FoldableTraversable.在我看来,这是两个最"类似列表"的类型.是否存在DList不是这些类的实例的性能原因?

而且,封装确实实现foldrunfoldr,但是没有其他的折叠功能.

haskell church-encoding difference-lists

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

在使用cabal进行编译时查看核心

构建我的应用程序时,我希望cabal自动将中间核心输出到文件中.我可以将-ddump-simpl标志添加到cabal文件的ghc-options字段中,但是这会将所有内容打印到stdout.有没有办法让cabal将所有这些重定向到文件?

haskell ghc cabal

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

结合travis和ec2

我有一个github项目,使用travis进行持续集成.我想在亚马逊ec2上部署我的项目.为了简化部署,我希望部署的系统具有与测试系统相同的配置.这可能吗?

AFAICT,这需要两件事:首先,ec2预配置的实例与travis使用的设置相匹配.有人存在吗?第二,travis.yml从命令行执行脚本的方法.我怎样才能做到这一点?

amazon-ec2 travis-ci

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