导入模块时解析输入“模块”上的错误

时间:2018-11-25 18:44:42

标签: haskell compiler-errors

这是Solitaire.hs文件的源代码:

import MergeSort

module Solitaire where

  a :: Int

  a = 2

MergeSort.hs和Solitaire.hs在同一目录中。

我正在使用WinGhci。

更改为目录并使用命令:load Solitaire.hs后尝试加载Solitaire.hs时出现的错误是:

Solitaire.hs:3:1: error: parse error on input ‘module’
  |
3 | module Solitaire where   | ^^^^^^
Failed, one module loaded.
*MergeSort> 

奇怪的是,只需删除导入语句:import MergeSort即可删除所有错误。

1 个答案:

答案 0 :(得分:1)

看看grammar(5.1):

module  →   module modid [exports] where body
       |    body
body    →   { impdecls ; topdecls }
       |    { impdecls }
       |    { topdecls }

impdecls    →   impdecl1 ; … ; impdecln     (n ≥ 1)
topdecls    →   topdecl1 ; … ; topdecln     (n ≥ 1)

此外,在5.3节中:

  

一个模块导出的实体可以在另一个模块的作用域中加入另一个声明,在模块的开头 。

如您所见,导入必须位于模块的 中,因此您的代码应为:

module Solitaire where
    import MergeSort

    a :: Int
    a = 2