如何使splice()
解析具有语言扩展名的Haskell文件?
使用parseModule
中的parseModule
时,当我尝试解析https://github.com/xmonad/xmonad/blob/master/src/XMonad/Core.hs中的文件Language.Haskell.Exts
时出现错误:
Core.hs
这似乎是因为它使用的是存在类型:
XGene-exe: fromParseResult: Parse failed at [<unknown>.hs] (248:25): Illegal data/newtype declaration
data Layout a = forall l. (LayoutClass l a, Read (l a)) => Layout (l a)
顶部有Core.hs
语言扩展编译指示:
ExistentialQuantification
当我尝试{-# LANGUAGE ExistentialQuantification, FlexibleInstances, GeneralizedNewtypeDeriving,
MultiParamTypeClasses, TypeSynonymInstances, DeriveDataTypeable #-}
(https://github.com/xmonad/xmonad/blob/master/src/XMonad/Core.hs)时出现错误
Layout.hs
尽管存在实用性:
Parse failed at [<unknown>.hs] (53:1): MultiParamTypeClasses language extension is not enabled. Please add {-# LANGUAGE MultiParamTypeClasses #-} pragma at the top of your module.
尽管有{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, PatternGuards, TypeSynonymInstances, DeriveDataTypeable #-}
,但 Main.hs
和Operations.hs
仍给出错误Malformed context: FlexibleContexts is not enabled
{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts #-}
,Config.hs
和ManageHook.hs
正确解析。
当我进行阴谋集团建设时,xmonad就会建设。
答案 0 :(得分:1)
由于duplode评论的指导,问题在于我使用的是parseModule
,而不是parseFile
。
parseFile
自动获取语言扩展名,而如果我只想解析源代码,则必须使用parseModuleWithMode
并添加相关扩展名。
parseFile
更适合我的用例。