![]() |
1
7
您可以直接这样做:
正如我可以推理的那样:对于不同类型的类,代码应该是类型感知的。如果您有多个实例,不同的类型将得到不同的实现,并且很容易解决。但是,如果您尝试使用单个非递归实例,则在运行时基本上没有关于该类型的信息,并且始终相同的代码仍然需要决定要处理的类型。当您有输入参数时,可以利用GADT为您提供类型信息。但对于
|
![]() |
2
2
这是利用
粗略地说,Haskell不允许我们在类型级别的值上进行模式匹配,例如
使用此选项需要提供
作为另一种选择,与原始代码类似,可以编写
这不是完全等效的,需要添加上下文
|
![]() |
3
2
将此视为@chi答案的附录,以提供对单例方法的额外解释。。。
我建议阅读
Hasochism paper
如果您还没有这样做。特别是,在那篇文章的第3.1节中,他们正好处理了这个问题,并将其作为一个激励示例,说明当隐式单例参数(
由于它适用于您的代码,主要问题是
我尝试使用与论文大致相同的命名约定:
就其本身而言,这个显式单例是有用的。例如,请参见
我们还不能用这个来定义
解决方案是引入隐式单例,它允许我们在需要时通过
现在,如果我们在
使用的定义
请注意一个奇怪之处。我们需要介绍一下
如果我们添加
定义
@chi在上使用大小写匹配
允许我们编写:
这两者都需要
无论如何,坚持使用helper函数,整个程序如下所示:
与
自动生成单例(使用构造函数
更多关于
|
![]() |
4
1
其他几个答案引入了
我将使用以下名称:
假设我们定义
我们可以这样写它的消除器(感应原理):
就我们的目的而言,我们真的不需要
这与
现在我们可以为
现在,这里有一个向量类型(我已经重命名了东西以符合我自己的口味):
因为
现在,如果向量长度在编译时已知,则
|
![]() |
trpnd · 如何定义由两个任意单声道变压器组成的单声道变压器? 2 年前 |
![]() |
Fabus1184 · Haskell mapM_不打印 2 年前 |
![]() |
Gotthold · 基于范数约束向量的类型 2 年前 |
![]() |
jian · haskell将另一个函数用作输入参数 2 年前 |
![]() |
Jocafrei · 用Haskell函数实现最大公约数函数 6 年前 |