I cloned built derive off of master to confirm this problem still exists in git. The version string output is as follows:
[2089] derive$ stack exec -- derive --version
Derive 2.5.* (C) Neil Mitchell 2006-2013
[2090] derive$ stack exec -- derive ./Minimal.hs
derive: fromParseResult: Parse failed at [./Minimal.hs] (3:5): Parse error: rec
CallStack (from HasCallStack):
error, called at src/Language/Haskell/Exts/ParseMonad.hs:83:41 in haskell-src-exts-1.18.2-Kjop5wIioOPX4MdOWk71u:Language.Haskell.Exts.ParseMonad
Now the really odd thing is that when I load haskell-src-exts-1.19.1 (the version I compiled derive against) and call parseFile
on that same Minimal.hs
file, the parse seems to go fine.
λ> import Language.Haskell.Exts
λ> parseFile "/home/ethan/Downloads/derive/Minimal.hs"
ParseOk (Module (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 1 1 4 1, srcInfoPoints = [SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 1 1 1 1,SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 1 1 1 1,SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 1 3 1,SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 4 1 4 1,SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 4 1 4 1]}) (Just (ModuleHead (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 1 1 1 21, srcInfoPoints = [SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 1 1 1 7,SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 1 16 1 21]}) (ModuleName (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 1 8 1 15, srcInfoPoints = []}) "Minimal") Nothing Nothing)) [] [] [FunBind (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 1 3 14, srcInfoPoints = []}) [Match (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 1 3 14, srcInfoPoints = []}) (Ident (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 1 3 4, srcInfoPoints = []}) "foo") [PAsPat (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 5 3 10, srcInfoPoints = [SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 8 3 9]}) (Ident (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 5 3 8, srcInfoPoints = []}) "rec") (PVar (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 9 3 10, srcInfoPoints = []}) (Ident (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 9 3 10, srcInfoPoints = []}) "a"))] (UnGuardedRhs (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 11 3 14, srcInfoPoints = [SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 11 3 12]}) (Var (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 13 3 14, srcInfoPoints = []}) (UnQual (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 13 3 14, srcInfoPoints = []}) (Ident (SrcSpanInfo {srcInfoSpan = SrcSpan "/home/ethan/Downloads/derive/Minimal.hs" 3 13 3 14, srcInfoPoints = []}) "a")))) Nothing]])
This problem happened both after a clean checkout and after I bumped the version constraint on haskell-src-exts to >= 1.19.0. I generated a stack.yaml file with stack init
so that you can have a clearer view of the rest of my build environment if you are interested I've pasted the contents here: https://pastebin.com/i5yd5qhY.