小编Rah*_*nne的帖子

(ML)模块vs(Haskell)类型类

根据Harper(https://existentialtype.wordpress.com/2011/04/16/modules-matter-most/),似乎Type Classes根本没有提供与Modules提供的相同级别的抽象,而我正在拥有很难确切地弄清楚原因.并且在该链接中没有示例,因此我很难看到关键差异.还有其他关于如何在模块和类型类之间进行翻译的论文(http://www.cse.unsw.edu.au/~chak/papers/modules-classes.pdf),但这对于从程序员的角度来看实现(它只是说没有人可以做的事情,另一个人无法模仿).

具体来说,在第一个链接中:

首先,他们坚持认为类型可以完全以一种方式实现类型类.例如,根据类型类的哲学,整数可以以一种方式(通常的顺序)排序,但显然有许多有趣的排序(例如,通过可分性).第二个问题是它们混淆了两个不同的问题:指定类型如何实现类型类,以及指定在类型推断期间何时应该使用这样的规范.

我也不明白.一个类型可以在ML中以多种方式实现类型类?如果不创建新类型,您将如何通过示例按可分性排序整数?在Haskell中,您必须执行诸如使用数据之类的操作,并instance Ord提供替代排序.

第二个,不是两个在Haskell中是截然不同的吗?指定"何时应在类型推断期间使用此类规范"可以通过以下方式完成:

blah :: BlahType b => ...
Run Code Online (Sandbox Code Playgroud)

其中BlahType是在类型推断期间使用的类而不是实现类.然而,"类型如何实现类型类"是使用完成的instance.

有人可以解释链接真正想说的内容吗?我只是不太明白为什么模块比Type Classes更少限制.

haskell ml sml

22
推荐指数
1
解决办法
3290
查看次数

在C++中有没有办法从不同的内存位置打印char*?

我不确定这个问题是否有多大意义,所以我将尝试展示一个例子:

想象一下,我在内存位置有一个字符串&s(不是空终止)和内存位置的另一个字符串z(空终止).

char s[4]; s[0] = 'a'; s[1] = 'a'; s[2] = 'a'; s[3] = 'a';
char *z = malloc(sizeof(char) * 4);
z[0] = 'a'; z[1] = 'a'; z[2] = 'a'; z[3] = '\0';
char *y = malloc(sizeof(char) * 4);
y[0] = 'a'; y[1] = 'a'; y[2] = 'a'; y[3] = '\0';
Run Code Online (Sandbox Code Playgroud)

有没有办法表示一个字符串,usz和另一个字符串v的串联,这是串联sy不必复制s

我知道它的读取速度不会很快,但它肯定会节省更多的内存,尤其是预期的重复次数.由于该值s可以从单独改变zy与变化应该出现在z和 …

c++

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

标签 统计

c++ ×1

haskell ×1

ml ×1

sml ×1