gpt4 book ai didi

haskell - 如何输入类型转换

转载 作者:行者123 更新时间:2023-12-02 19:17:24 28 4
gpt4 key购买 nike

C#:

static int F(object x)
{
return x is string ? 1 : 2;
}

haskell ?在我看来,棘手的一点是 Haskell 没有根类型对象

编辑:我不关心转换为字符串。我想知道如何进行类型转换(例如查看对象客户还是订单

最佳答案

在 Haskell 中,所有允许转换为字符串的类型都会实例化提供的 Show 类型类

show :: Show a => a -> String

所以你的整个代码只不过是

f x = show x

f = show

具有相同的泛型类型f::Show a => a -> String(对于所有可转换为字符串的类型a,取该类型的值并返回一个字符串)。

请注意,您不必像 C# 那样进行显式的运行时类型检查;通用模板在编译时解析。您不需要多态根类型 - 像 C# 中那样的强制转换实际上会有些复杂并且违背了该语言的概念。它不允许类型之间的任意转换,而是为某些有意义的转换定义类型类。

请注意,兼容性是在编译时检查的:

-- Working
f 1
f "Hallo"
f (1, 2)
f [1, 2, 3]

-- Not working
f (\x -> x + 1)

回复您编辑的问题:

正如我之前所说,Haskell 中不允许任意转换(没有非常非常不安全的代码)。而且由于 Haskell 不是面向对象的,因此不存在需要任何强制转换的继承关系。根本不存在需要运行时检查/转换的无意义的对象值。为了表达替代方案,您必须定义联合类型、类型类或使用 Either 类型。

在什么情况下您会遇到 CustomerOrder 对象?这种类型的值简直是无意义的。请再次澄清。

至于您的记录器示例:您需要一个类型类:

class Loggable a where
writeToLog :: a -> IO ()

关于haskell - 如何输入类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1894365/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com