这是哈斯克尔代码。我在下面找到了为什么我错了。
\n\nmain = do\n print [1] -- Okay\n print [] -- error\nRun Code Online (Sandbox Code Playgroud)\n\n错误字符串如下。
\n\n\n\n\nP07.hs:38:11: 错误:\n ? 由于使用 \xe2\x80\x98print\xe2\x80\x99\n 而产生的不明确类型变量 \xe2\x80\x98t0\xe2\x80\x99 阻止了约束 \xe2\x80\x98(Show t0)\xe2\ x80\x99 无法解决。\n 可能的修复:使用类型注释来指定 \xe2\x80\x98t0\xe2\x80\x99 应该是什么。\n 这些潜在实例存在:\n 实例显示排序 -- 定义于\xe2\x80\x98GHC.Show\xe2\x80\x99\n 实例 显示整数 -- 定义于 \xe2\x80\x98GHC.Show\xe2\x80\x99\n 实例 显示 a => 显示(可能是 a) - - 在 \xe2\x80\x98GHC.Show\xe2\x80\x99\n 中定义 ...加上 22 个其他\n ...加上涉及超出范围类型的 5 个实例\n(使用 -fprint-pottial-instances查看全部)\n ? 在 'do' 块的 stmt 中: print []\n 在表达式中: do { print [] }\n 在 \xe2\x80\x98main\xe2\x80\x99 的方程中: main = do { print [ ] }
\n
我尝试过[] :: Show不工作。我想我只是不知道这些错误意味着什么..请帮助我。\n谢谢。
Haskell 中的列表在其元素类型上是多态的,并且由于[]包含的信息不足,您必须通过显式给出类型注释来提供 ghc [] :: [Int]。
您收到的错误是由于Show列表的实例取决于Show其元素的实例,并且 ghc 无法确定它假设 ist 没有这样的实例。
现在您可能认为一切都可以转换为 a String,但是您可以考虑Int -> Int并尝试
show [(+1)]
Run Code Online (Sandbox Code Playgroud)
这将不起作用,因为 Haskell 中的函数没有默认Show实例。
| 归档时间: |
|
| 查看次数: |
1422 次 |
| 最近记录: |