小编Jia*_* Lu的帖子

非平凡函子的示例

在Haskell中,函子几乎总是可以派生的,是否存在类型为函子且满足函子定律(例如fmap id == id)但不能根据一组简单规则派生的情况?

那可折叠,可遍历,半群等呢?有没有重要的案例?

haskell functor category-theory

13
推荐指数
3
解决办法
1035
查看次数

为什么说类型类是存在的?

根据此链接描述存在类型

存在类型的值,例如?x。F(x)是一对包含x类型和F(x)类型值的对。而一个多态类型的值,如?x。F(x)是采用某种x类型并产生F(x)类型值的函数。在这两种情况下,类型都在某个类型构造函数F上关闭。

但是具有类型类约束的函数定义不会与类型类实例配对。

并非如此forall f, exists Functor f, ...(因为很明显并非每个类型f都具有Functor f的实例,因此exists Functor f ...并非如此)。

不是exists f and Functor f, ...(因为它适用于所有满足f的实例,不仅适用于选定的实例)。

对我来说,它forall f and instances of Functor f, ...更像是scala的隐式参数,而不是存在的类型。

并根据此链接描述类型类

[ Eq从逻辑上讲,[类的声明]表示一个类型a a -> a -> Bool居住于该类型,或者从a可以证明a -> a -> Bool(该类为此提供了两个不同的证明,分别是name ==/=)。该命题具有存在性(不要与存在性类型混淆)

类型类和存在类型之间有什么区别,为什么它们都被认为是“存在的”?

haskell typeclass

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

mingw-w64:<cstdio>中的慢速sprintf

那是<cstdio>在C++头只包含相同的功能,<stdio.h>但同时又提出在std命名空间?

我在使用mingw-w64编译的程序中遇到了奇怪的效率问题,这比linux上慢十倍.经过一些测试,我发现问题出在了sprintf.

然后我做了以下测试:

#include <stdio.h>
// #include <cstdio>
// using std::sprintf;

int main () {
  int i;
  for (i = 0; i < 500000; i++){
    char x[100];
    sprintf(x, "x%dx%dx", i, i<<2);
  }
}
Run Code Online (Sandbox Code Playgroud)

使用<stdio.h>它编译时比使用它快15倍<cstdio>.这是时间:

$ time ./stdio

real    0m0.557s
user    0m0.046s
sys     0m0.046s

$ time ./cstdio

real    0m7.465s
user    0m0.031s
sys     0m0.077s

$ g++ --version
g++.exe (rubenvb-4.8-stdthread) 4.8.1 20130324 (prerelease)
Copyright (C) 2013 Free Software Foundation, Inc.
This …
Run Code Online (Sandbox Code Playgroud)

c++ gcc mingw stdio

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

标签 统计

haskell ×2

c++ ×1

category-theory ×1

functor ×1

gcc ×1

mingw ×1

stdio ×1

typeclass ×1