und*_*012 0 haskell empty-list
这是一段代码:
import System.Environment
myReverse :: [a] -> [a]
myReverse [] = []
main = print (myReverse [])
Run Code Online (Sandbox Code Playgroud)
当我使用GHC编译时,我收到以下错误:
[1/1]编译Main(problem5_myReverse.hs,problem5_myReverse.o)problem5_myReverse.hs:6:8:因使用
print' The type variablea0 而产生的(显示a0)的实例不明确可能的修复:添加修复这些的类型签名type variable(s)注意:有几个潜在的实例:实例Show Double - 在GHC.Float' instance Show Float -- Defined inGHC.Float'实例中定义(Integral a,Show a)=> Show(GHC.Real.Ratio a) - 在GHC.Real' ...plus 23 others In the expression: print (myReverse []) In an equation formain'中定义: main = print(myReverse [])
但是,当我从更改签名myReverse::[a]->[a],以myReverse::[Int]->[Int]源代码是没有任何问题的编译
有人可以告诉我如何保留一般签名[a] -> [a]但让它适用于空的整数列表?
从myReverse [](或[]一般)来说,类型推理器不可能推断列表元素类型,因为它是一个空列表.如果你明确地调用eg myReverse ([] :: [Int]),它将能够找到Show列表的实例,以便它可以在打印之前将其转换为字符串.
这是因为Show列表实例的定义Show a => Show [a]意味着[a]只有一个Show实例,如果它a有一个Show实例.但是a在这种情况下没有开始[].
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |