|
|
1
37
在Haskell中,所有允许转换为字符串的类型都实例化
或
具有相同的泛型类型
注意,您不必像在C#中那样进行显式的运行时类型检查;通用模板在编译时解析。你不需要多态的根类型——像C#中的类型转换实际上有点复杂,而且违背了语言的概念。它不允许在类型之间进行任意转换,而是为某些有意义的转换定义了TypeClass。
回答您编辑的问题
正如我之前所说,Haskell中不允许任意转换(没有非常不安全的代码)。由于Haskell不是面向对象的,所以不存在需要任何强制转换的继承关系。根本没有什么意义
在什么情况下,您遇到的对象是
您需要一个typeclass:
|
|
|
2
20
Dario是对的,通常在Haskell中,您希望创建一个类型类来分派某个对象的类型。话虽如此,但事实并非如此 Scrap your boilerplate 通用编程库,允许您编写复杂嵌套数据类型操作的“有趣”部分,而SYB则填补空白。大脑融合得太棒了。这里有一个关于它的演示 ppt html . 以下是演员阵容:
|
|
|
3
9
铸造和
|
|
|
4
4
Data.Typeable
,正如Dario观察到的,它涵盖了所有标准类型,尽管您需要通过“
stringtyperep :: TypeRep stringtyperep = typeOf "somestring" F :: (Typeable 'a) =>'a -> Integer F x | (typeOf x == stringtyperep) = 1 F x = 2 一般来说,使用泛型编程可以更好地实现OO风格的类型反射,但这不是一个很好的例子。
此外,typeclass中的所有类型
|
|
|
5
3
如果希望对象既可以是客户,也可以是订单,那么需要引入一个新的数据类型“Customer | Order”,以便每个对象都带有一个类型标记,指明它是哪一个。 我不知道Haskell的语法,但在F#中应该是
更一般地说,在Haskell中,如果您想执行固定的OO类型层次结构之类的操作(对于一组固定的高度相关的类型,在某些情况下可以将它们视为相同的类型),可以使用上述联合类型。另一方面,对于跨各种不相关类型(如ToString/Show)的常见操作,可以使用Haskell类型类。 |
|
|
6
3
这是我以前试过的,我认为你做不到。 Introduction to Haskell Pure Functions
|
|
|
7
3
定义
|
|
8
2
在C#中,不做演员可能更有效:
在Haskell中有“show”类型类,任何实现该类型类的东西都可以对其调用show,因此不需要强制转换。 |
|
|
DutChen18 · 如何在C宏中内联触发隐式指针转换? 2 年前 |
|
|
0xDED · 如何将泛型类强制转换为对象的泛型类? 2 年前 |
|
|
Niclas · 变量>-1如何在C中精确求值? 2 年前 |
|
|
Textime · 将Varchar2转换为时间 2 年前 |
|
|
xpt · Go,无法将类型*int32转换为类型*int64 2 年前 |