2

如何parseModule使用语言扩展名解析 Haskell 文件?

使用parseModulefrom Language.Haskell.Exts,当我尝试Core.hshttps://github.com/xmonad/xmonad/blob/master/src/XMonad/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 #-}

当我尝试Layout.hshttps://github.com/xmonad/xmonad/blob/master/src/XMonad/Core.hsParse 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.hsManageHook.hsStackset.hs正确解析。

xmonad 在我进行 cabal 构建时构建。

4

1 回答 1

2

感谢 duplode 评论的指导,问题是我使用的是parseModule,而不是parseFile.

parseFile自动获取语言扩展,而如果我只想解析源代码,那么我将不得不使用parseModuleWithMode并添加相关的扩展。

parseFile更适合我的用例。

于 2019-07-16T08:35:33.567 回答