2015-01-08 67 views
1

當我嘗試從http://michaeldadams.org/papers/scrap_your_zippers/ScrapYourZippers.hs編譯代碼我得到:不是在哈斯克爾範圍

ScrapYourZipper.hs:249:15: Not in scope: type variable ‘hole’ 
ScrapYourZipper.hs:251:27: Not in scope: type variable ‘root’ 
ScrapYourZipper.hs:252:20: Not in scope: type variable ‘hole’ 
ScrapYourZipper.hs:252:25: Not in scope: type variable ‘root’ 

代碼的一部分,其中這happend:

245 data Context hole root where 
246 CtxtNull :: Context a a 
247 CtxtCons :: 
248  forall rights parent. (Data parent) => 
249  Left (hole -> rights) 
250  -> Right rights parent 
251  -> Context parent root 
252  -> Context hole root 

任何想法/指針什麼錯?

PS:對於這篇文章命名不當,抱歉,我沒有想到任何有意義的東西。

回答

0

248線應該是

forall rights parent root hole. (Data parent) => 

這有可能是GHC曾經是更寬容的位置在老版本...

+0

我得到了與@ user5402解決方案相同的錯誤。 – user2340939

+0

但是,如果我只使用root或者只使用hole,那很好,儘管我仍然得到另一個變量的錯誤。 – user2340939

+0

它的工作很抱歉,我編譯時只使用了一段代碼。 – user2340939

4

我取代該數據聲明與:

data Context hole root where 
    CtxtNull :: Context a a 
    CtxtCons :: (Data parent) => Left (hole -> rights) -> Right rights parent -> Context parent root -> Context hole root 

(即只是刪除forall子句)和它編譯。

+0

是啊,去掉'forall'就更簡單了。 – kosmikus

+0

你試過編譯整個代碼嗎?我得到了一堆錯誤,比如「無法匹配預期類型」洞 - > t1'與實際類型't',因爲類型變量'洞'將會逃離其範圍「 – user2340939

+0

將您的完整代碼發佈到某處(例如lpaste/pastebin)和我會看看它。我可以通過上面的修改來編譯ScrapeYourZipper.hs文件。 – ErikR