导入Haskell模块时出错

时间:2017-02-22 07:46:53

标签: haskell

我正在尝试从名为surface的文件中导入一个名为Shapes的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
)

提前致谢     其中

1 个答案:

答案 0 :(得分:1)

首先,我认为您的代码来自:http://learnyouahaskell.com/making-our-own-types-and-typeclasses

并且介绍中还有一部分涉及模块的定义:http://learnyouahaskell.com/modules

建议文件和模块具有上述链接中所述的相同名称。这将解决您在" surface"上的解析错误的问题。您不应该做的下一点是将文件命名为模块中的函数。

您在示例中使用了限定导入。这里解释了合格的导入:https://www.haskell.org/tutorial/modules.html

通常,如果有两个模块包含不同的实体但名称相同,则使用合格的导入。限定导入允许您使用导入的模块为导入的名称添加前缀。因此,我不确定您的示例中是否需要合格的导入。

总之,您应该进行以下更改:

  • 将包含Shapes模块的文件重命名为" Shapes.hs"
  • 重命名第二个文件来自" surfaceImport.hs"类似于" ShapesUsageExample.hs"
  • 将导入更改为import Shapes
相关问题