我有一个游戏的Haskell代码,可以找到完整的here。
以下是BoardMain.hs
{-# Language MultiParamTypeClasses, FunctionalDependencies #-}
import Control.Monad.Trans (liftIO)
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Layout.BackgroundContainer
import Graphics.UI.Gtk.Board.BoardLink
import GtkPegSolitaire
attemptDragStart :: Board Int Tile Peg -> (Int, Int) -> IO Bool
attemptDragStart _ _ = return True
当我运行时,我收到以下错误
BoardMain.hs:39:21: error:
Not in scope: type constructor or class ‘Board’
BoardMain.hs:39:31: error:
Not in scope: type constructor or class ‘Tile’
BoardMain.hs:39:36: error:
Not in scope: type constructor or class ‘Peg’
我知道我犯了一个小错误。任何帮助表示赞赏。
可以找到{p>GtkPegSolitaire.hs
和PegSolitaire.hs
here
答案 0 :(得分:2)
如上所述duplode,我忘了导入一些模块。 那么,所有应该做的就是将以下4行添加到BoardMain.hs
import PegSolitaire
import Graphics.UI.Gtk.Board.TiledBoard
import Data.Maybe
import Control.Monad
GtkPegSolitaire.hs
和PegSolitaire.hs
是正确的。
此游戏的author已收到此问题的通知。
感谢duplode帮助我们。
答案 1 :(得分:1)
您的类型的定义位于PegSolitaire
,但您不会在主模块中导入它。在那里,您只导入了GtkPegSolitaire
和一些库模块。导入不可传递,因此您需要将import PegSolitaire
添加到主模块。 (如果导入是可传递的,那么对于一个,库编写者就不可能将模块隐藏在公共API之外。)