我可以“返回”Num a 就像文字似乎能够“返回”Num a 一样吗?

Fra*_*y I 5 haskell

在 ghci 中,如果我这样做

Prelude> :t 5
Prelude> 5 :: Num a => a
Run Code Online (Sandbox Code Playgroud)

但如果我分配 5,我会得到Integer以下类型:

Prelude> let f = 5
Prelude> t: f
Prelude> f :: Integer
Run Code Online (Sandbox Code Playgroud)

根据我的理解,5 是允许的事实Num a => a是可以愉快地出现在任何数学表达式中(例如5 + 5.0)。我想我很好奇这是否是 Haskell 的魔法,或者我是否可以创建一个f具有相同行为方式的变量,以便我可以执行f + 5.0. 我尝试了以下方法但没有成功:

let f = 10 :: Num a => a
Run Code Online (Sandbox Code Playgroud)

f + 5.0仍然给我一个错误。