2017-02-22 70 views
0

我試圖從一個叫做面文件(編譯罰款)錯誤導入哈斯克爾模塊

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) 

我收到以下錯誤,當我嘗試編譯這個程序中導入指定形狀Haskell的模塊時

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

我試圖導入該模塊是本

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

在ADVA謝謝NCE 其中

+0

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

+5

的模塊的名稱和文件的名稱應該相同。在你的情況下,將文件表面重命名爲Shapes並在你的surfaceImport模塊中導入Shapes。另一個問題是你在導出中有一個叫做surface的函數。您的文件名和功能不應該有相同的名稱。 – 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雜項文件」
  • 的進口改爲import Shapes