在Haskell中显示未知类型的列表

时间:2015-05-12 02:52:14

标签: haskell

我得到了一个我应该有类型签名的作业

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模糊类型的方法吗?

1 个答案:

答案 0 :(得分:3)

尝试运行

> :info Group

这应该打印出Group类型类及其成员,然后是实例列表。选择其中一个实例,然后执行

> myTest 1 2 :: [[TheTypeYouPicked]]

如果你想在main内使用它,你也必须在那里给它一个类型签名:

main :: IO ()
main = print (myTest 10 0 :: [[TheTypeYouPicked]])

编译器向您显示此错误的原因是因为可能有许多Group实例可供选择,并非所有实例都必须实现Show。为了在控制台中打印某些内容,只需执行它(当您在GHCi中运行正常函数时有隐式print)或使用显式print它需要实现{{1} }。