Haskell中推断的函数类型

use*_*615 2 haskell

我在Haskell中定义了如下函数

func x | x > 0 = 4
       | otherwise = error "Non positive number"
Run Code Online (Sandbox Code Playgroud)

它的推断类型是

func :: (Ord a, Num a, Num t) => a -> t
Run Code Online (Sandbox Code Playgroud)

为什么它的类型不可能

func :: (Ord a, Num a) => a -> a
Run Code Online (Sandbox Code Playgroud)

arr*_*owd 6

类型func :: (Ord a, Num a) => a -> a意味着返回的类型应该与您传入的类型匹配.但是由于您返回的是常量并且它不依赖于输入,因此它的类型可以是任何类型的类Num.因此,编译器推断func :: (Ord a, Num a, Num t) => a -> t.