|
|
1
57
这里有两个单独的问题:
我将从第二个问题开始,因为答案更简单:
这个
这个
第一个问题的答案稍微复杂一些。在许多情况下,包括我的
然而,在其他情况下,我们可以利用这样一个事实,即有时无形状(我将具体讨论
哪里
稍后)使用类型成员而不是类型参数。例如,假设我们要编写一个方法,该方法将返回一个函数,该函数将指定的case类类型转换为
现在我们可以这样使用它:
我们会得到一个很好的
Scala不支持类型参数的部分应用,因此每次调用这个(假设的)方法时,我们都必须指定两个类型参数,因为我们要指定
这使得它基本上毫无价值,因为整个要点是让通用机器来计算表示。
通常,只要类型由类型类的其他参数唯一确定,Shapeless就会使其成为类型成员而不是类型参数。每个case类都有一个泛型表示,因此
使唯一确定的类型成为类型成员而不是类型参数意味着如果我们只想将它们用作路径依赖类型(如第一个
作为旁注,类型类的类型“参数”(我使用引号,因为它们可能不是 参数 在文字Scala意义上)被称为 "functional dependency" 在Haskell这样的语言中,但你不应该觉得你需要了解Haskell的函数依赖性,才能了解Shapeless中的情况。 |
|
|
softshipper · 无形状:隐含在函数体中 8 年前 |
|
|
jamborta · 在类内使用ReplaceAt 8 年前 |
|
|
simao · 使用无形状更新案例类字段 9 年前 |
|
|
jamborta · 从泛型生成无形状记录 9 年前 |
|
|
vicaba · 不成形。引用1个构造函数参数的所有case类 9 年前 |
|
|
Larousso · 具有隐式解析的无形状pb的自定义类型类 9 年前 |
|
|
visa · 无形状:为什么align不适用于单例类型? 9 年前 |
|
|
Hugo Corrêa · 协变类型出现在HList中的不变位置 9 年前 |