我得到了一个我应该有类型签名的作业
Group g => Int -> Int -> [[g]]
但是如果g不明确我怎么能print
呢?我收到这个错误:
No instance for (Show g0) arising from a use of ‘print’
The type variable ‘g0’ is ambiguous
Note: there are several potential instances:
instance Show Double -- Defined in ‘GHC.Float’
instance Show Float -- Defined in ‘GHC.Float’
instance (Integral a, Show a) => Show (GHC.Real.Ratio a)
-- Defined in ‘GHC.Real’
...plus 24 others
In the expression: print
In the expression: print $ myTest 10 0
In an equation for ‘main’: main = print $ myTest 10 0
这对我有意义。作业中是否有错误?或者有print
模糊类型的方法吗?
答案 0 :(得分:3)
尝试运行
> :info Group
这应该打印出Group
类型类及其成员,然后是实例列表。选择其中一个实例,然后执行
> myTest 1 2 :: [[TheTypeYouPicked]]
如果你想在main
内使用它,你也必须在那里给它一个类型签名:
main :: IO ()
main = print (myTest 10 0 :: [[TheTypeYouPicked]])
编译器向您显示此错误的原因是因为可能有许多Group
实例可供选择,并非所有实例都必须实现Show
。为了在控制台中打印某些内容,只需执行它(当您在GHCi中运行正常函数时有隐式print
)或使用显式print
它需要实现{{1} }。