parseModule无法识别某些语言扩展为已启用

时间:2019-07-14 13:31:12

标签: haskell haskell-src-exts

如何使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.hsOperations.hs仍给出错误Malformed context: FlexibleContexts is not enabled

{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts #-}Config.hsManageHook.hs正确解析。

当我进行阴谋集团建设时,xmonad就会建设。

1 个答案:

答案 0 :(得分:1)

由于duplode评论的指导,问题在于我使用的是parseModule,而不是parseFile

parseFile自动获取语言扩展名,而如果我只想解析源代码,则必须使用parseModuleWithMode并添加相关扩展名。

parseFile更适合我的用例。