| 1 | {-# LANGUAGE PatternGuards #-} |
|---|
| 2 | module Main where |
|---|
| 3 | |
|---|
| 4 | import GHC |
|---|
| 5 | import GHC.Paths ( libdir ) |
|---|
| 6 | import Bag (filterBag,isEmptyBag) |
|---|
| 7 | import System.Directory (removeFile) |
|---|
| 8 | |
|---|
| 9 | main::IO() |
|---|
| 10 | main = do |
|---|
| 11 | let c="module Test where\ndata DataT=MkData {name :: String}\n" |
|---|
| 12 | writeFile "Test.hs" c |
|---|
| 13 | ok<- runGhc (Just libdir) $ do |
|---|
| 14 | dflags <- getSessionDynFlags |
|---|
| 15 | setSessionDynFlags dflags |
|---|
| 16 | let mn =mkModuleName "Test" |
|---|
| 17 | addTarget Target { targetId = TargetModule mn, targetAllowObjCode = True, targetContents = Nothing } |
|---|
| 18 | load LoadAllTargets |
|---|
| 19 | modSum <- getModSummary mn |
|---|
| 20 | p <- parseModule modSum |
|---|
| 21 | t <- typecheckModule p |
|---|
| 22 | d <- desugarModule t |
|---|
| 23 | l <- loadModule d |
|---|
| 24 | let ts=typecheckedSource l |
|---|
| 25 | let fs=filterBag getDataCon ts |
|---|
| 26 | return $ not $ isEmptyBag fs |
|---|
| 27 | removeFile "Test.hs" |
|---|
| 28 | print ok |
|---|
| 29 | where |
|---|
| 30 | getDataCon (L _ (f@FunBind {})) |
|---|
| 31 | | (MatchGroup (m:_) _)<-fun_matches f, |
|---|
| 32 | (L _ (c@ConPatOut{}):_)<-hsLMatchPats m, |
|---|
| 33 | (L l _)<-pat_con c |
|---|
| 34 | =isGoodSrcSpan l |
|---|
| 35 | getDataCon _=False |
|---|