为什么返回String不算作Showx类型的表达式?

谁能帮我理解为什么这段代码会产生编译错误?

hello :: (Show x) => x
hello = "Hello"

我以为String有了 的属性Show,那么函数应该可以返回一个String? 这是错误消息:

hello :: (Show x) => x
hello = "Hello"

回答

你的类型签名并不意味着你认为它意味着什么。

从你的解释来看,你似乎读到了类似“我将返回一个x具有 实例的某种类型的值Show。我不会告诉你它到底是什么类型,但我保证它将有一个Show

但它真正的意思是“选择一个类型,任何类型,只要确保它有一个 的实例Show,我保证我会返回一个该类型的值

换句话说,当一个函数是泛型时,选择泛型类型的是函数的调用者,而不是实现者。


以上是为什么返回String不算作Showx类型的表达式?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>