在Haksell中打印空列表



下面是这段代码:

import System.Environment 
myReverse :: [a] -> [a]
myReverse [] = []
main = print (myReverse [])

当我用GHC编译时,我得到以下错误:

[1 of 1]编译Main (problem5_myReverse.)海关,problem5_myReverse。o)problem5_myReverse.hs: 6:8:使用print' The type variable a0'产生的(Show a0)实例没有不明确的可能的修复:添加一个类型签名来修复这些类型变量注意:有几个潜在的实例:实例显示双精度——在GHC.Float' instance Show Float -- Defined in GHC中定义。浮动的实例(Integral a, Show a) => Show (GHC.Real.)比一个)——定义在GHC.Real' ...plus 23 others In the expression: print (myReverse []) In an equation for main': main = print (myReverse [])

但是当我将签名从myReverse::[a]->[a]更改为myReverse::[Int]->[Int]时,源代码编译没有任何问题

有人能告诉我如何保持通用签名[a] -> [a],但使其适用于空整数列表吗?

myReverse [](或一般的[])中,类型推断器不可能推断出列表元素类型,因为它是一个空列表。如果你显式地调用myReverse ([] :: [Int]),它将能够为列表找到一个Show实例,以便在打印之前将其转换为字符串。

这是因为列表的Show实例是用Show a => Show [a]定义的,这意味着如果aShow实例,[a]只有Show实例。但是在[]的情况下,没有a可以开始

相关内容

  • 没有找到相关文章

最新更新