2017-02-22 12 views
0

Я пытаюсь импортировать модуль Haskell именованных фигуры из файла под названием поверхности (которая компилирует штраф)Ошибки при импорте модуля Haskell

import qualified surface.Shapes as Shapes 

surfaceImport :: Shape -> Float 
surfaceImport (Circle _ r) = pi * r^2 
surfaceImport (Rectangle (Point x1 x2) (Point y1 y2)) = (abs $ x1 - x2) * (abs $ y1 - y2) 

Я получаю следующее сообщение об ошибке, когда я пытаюсь скомпилировать эту программу

surfaceImport.hs:1:18: error: parse error on input `surface' 
Failed, modules loaded: none. 

модуль Я пытаюсь импортировать это за

module Shapes 
(
Point(..), 
Shape(..), 
surface, 
nudge, 
baseCircle, 
baseRectangle 
) 

Спасибо ADVA сть где

+0

https://downloads.haskell.org/~ghc/7.0.3/docs/html/users_guide/separate-compilation.html –

+5

имя модуля и имя файла должны совпадать. В вашем случае переименуйте поверхность файла в фигуры и импортируйте фигуры в свой модуль поверхности. Другая проблема заключается в том, что у вас есть функция, называемая поверхностью в вашем экспорте. Имя вашего файла и функция не должны иметь одинаковое имя. – siebenschlaefer

ответ

0

так, прежде всего, я думаю, что ваш код от: http://learnyouahaskell.com/making-our-own-types-and-typeclasses

и есть также часть во введении в отношении определения модулей: http://learnyouahaskell.com/modules

Рекомендуется, чтобы файл и модуль имеет то же имя, что указано в ссылке выше. Это решит вашу проблему с ошибкой синтаксического анализа на «поверхности». Следующий момент, который вам не следует делать, - это назвать ваш файл как функцию в вашем модуле.

Вы используете квалифицированный импорт в своем примере. Квалифицированный импорт объясняется здесь: https://www.haskell.org/tutorial/modules.html

В общем случае используется квалифицированный импорт, если есть два модуля, содержащие разные объекты, но с тем же именем. Квалифицированный импорт позволяет префикс импортированных имен импортированным модулем. Следовательно, я не уверен, что вам нужен квалифицированный импорт в вашем примере вообще.

В заключение необходимо сделать следующие изменения:

  • Переименовать файл, содержащий модуль формы, чтобы «Shapes.hs»
  • Переименуйте второй файл «surfaceImport.hs» на что-то вроде «ShapesUsageExample .hs»
  • Изменить импорт в import Shapes

 Смежные вопросы

  • Нет связанных вопросов^_^