Ошибка разбора на входе 'module' при импорте модуля - PullRequest
0 голосов
/ 25 ноября 2018

Это исходный код файла Solitaire.hs:

import MergeSort

module Solitaire where

  a :: Int

  a = 2

MergeSort.hs и Solitaire.hs находятся в одном каталоге.

Я использую WinGhci.

Ошибка, которую я получаю при попытке загрузить Solitaire.hs после перехода в его каталог и использования команды: load 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 голосов
/ 25 ноября 2018

Взгляните на грамматику (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
...